arrays - 使用 sas 将一组日期与另一组日期进行比较
问题描述
我的数据集如下所示:
ID Date_of_infusion1 Date_of_infusion2...Date_of_infusion33 Labdate1 Labdate2 ...Labdate100
A 04/01/2016 08/06/2016 . 11/08/2017 10/21/2017 .
B 09/18/2015 . . 09/22/2015 09/30/2015 .
C 11/24/2015 . . 07/05/2015 . .
我想要做什么:对于每个 ID,如果实验室日期在任何输注日期之后但在该日期的 4 个月内(任何输注日期<=实验室日期<=输注日期 + 4 个月),则保留它;否则放弃labdate。
我想做的是:制作 2 个阵列,一个用于输注日期,一个用于实验室日期。然后创建一个与 Labdate 关联的“标志”变量。
我写了这样的东西:
array infusion {*} date_of_infusion:;
array labdate {*} labdate:;
array flag {101} flag0-flag100;
do i= 1 to dim(labdate);
do j=1 to dim(infusion);
if infusion[j] ne . and infusion[j]<=labdate[i]<=intnx('month',infusion[j],4) then flag[i]=1;else flag[i]=0;
end;
end;
但是,结果看起来不像我想要的......
任何帮助表示赞赏!谢谢!
解决方案
你对你的回答者太封闭了。
当有一段代码看起来“正确”但提交给解析器后,结果是错误的,是时候做一些检查和修改了,调用debug
.
调试的基本技术是将关键消息打印到日志并找到错误发生的位置。所以我将put
语句添加到您的代码中:
data have;
input ID$ (Date_of_infusion1 Date_of_infusion2 Labdate1 Labdate2) (mmddyy10. +1);
format Date_of_infusion1 Date_of_infusion2 Labdate1 Labdate2 x e8601da.;
cards;
A 04/01/2016 08/06/2016 11/08/2017 10/21/2017
B 09/18/2015 . 09/22/2015 09/30/2015
;
run;
data want;
set have;
array infusion {*} date_of_infusion:;
array labdate {*} labdate:;
array flag {101} flag0-flag100;
do i= 1 to dim(labdate);
do j=1 to dim(infusion);
if infusion[j] ne . and infusion[j]<=labdate[i]<=intnx('month',infusion[j],4) then flag[i]=1;else flag[i]=0;
if flag[i]=1 then put ID flag0-flag1;
end;
end;
run;
日志显示:
B 1 .
B 0 1
看,我们得到了 flag0 = 1,但在下一次迭代中丢失了它。想想它为什么会发生,我们很快就知道当我们有flag[i]=1
. flag[i]=1
否则,除非所有人都date_of_infusion:
符合法官的表达,否则我们永远不会得到。
所以这里是调试的结果。
data want;
set have;
array infusion {*} date_of_infusion:;
array labdate {*} labdate:;
array flag {101} flag0-flag100;
do i= 1 to dim(labdate);
do j=1 to dim(infusion);
if infusion[j] ne . and infusion[j]<=labdate[i]<=intnx('month',infusion[j],4) then flag[i]=1;else flag[i]=0;
if flag[i] then leave;
end;
end;
run;
希望你喜欢编码的时间。
推荐阅读
- android - TruckRestrictionPenalty=soft 在此处映射 android sdk
- windows - 将文件的时间戳与当前时间戳进行比较
- python - 如何为列表中的每个元素分配条件
- python - 使用 numpy.ndarray.ndim(arr) 直接获取维数
- android - JSON对象到字符串数组
- azure - Deploy console app from Azure Devops (cloud version) to a machine with a Microsoft-provided host agent (Failed to create PSDrive with destination...)
- javascript - 无法将复选框值发送到 php
- reporting-services - 一过滤多列SSRS
- c - 没有鼠标的win32,如何将键盘快捷键分配给按钮
- java - 如何在 Webflux 功能端点的测试中禁用 Spring Security