如何获取sas中最后一个未丢失的前两个连续丢失
我正在尝试选择ADT的最后一个非缺失DAT值,如果子对象有两个连续缺失的DAT,则最新的DAT将设置为ADT值。 下面的代码生成了我所拥有的数据,我希望ADT可以通过下面的规则(最终合并到这个集合中,或者只是创建到一个全新的集合中)来推导: 对于该受试者的受试者ID 1001:1997-05-01,没有连续缺失(尽管只有单个非连续缺失) 对于受试者1002:1998-02-01,由于该受试者在2-5的位置连续缺失 对于受试者1003:1999-03-08,由于第一个连续缺失发生在4的AVISIT,并且在AVISIT=3时,没有缺失数据 希望你能帮助我。谢谢如何获取sas中最后一个未丢失的前两个连续丢失,sas,Sas,我正在尝试选择ADT的最后一个非缺失DAT值,如果子对象有两个连续缺失的DAT,则最新的DAT将设置为ADT值。 下面的代码生成了我所拥有的数据,我希望ADT可以通过下面的规则(最终合并到这个集合中,或者只是创建到一个全新的集合中)来推导: 对于该受试者的受试者ID 1001:1997-05-01,没有连续缺失(尽管只有单个非连续缺失) 对于受试者1002:1998-02-01,由于该受试者在2-5的位置连续缺失 对于受试者1003:1999-03-08,由于第一个连续缺失发生在4的AVISIT
data have;
infile datalines truncover;
input subjid avisit dat : yymmdd10.;
format dat yymmdd10.;
datalines;
1001 0 1997-01-01
1001 1 1997-02-01
1001 2
1001 3 1997-05-01
1002 0 1998-01-01
1002 1 1998-02-01
1002 2
1002 3
1002 4
1002 5
1002 6 1998-12-01
1003 0 1999-01-01
1003 1 1999-02-01
1003 2
1003 3 1999-03-08
1003 4
1003 5
1003 6 1999-05-01
1003 7
1003 8
;
run;
每当连续缺失的
dat
计数大于或等于2时,下面将创建一个包含最后一个非缺失的dat
的数据集。每次遇到缺失的dat
,我们都会将连续缺失计数器nmiss
增加1
我们总是将dat
的最后一个有效值存储在变量last\u nonmissing\u dat
和last\u nonmissing\u avisit
中,以便在遇到缺失值时,它们总是结转。当出现两个连续的缺失值时,我们输出结果
每当我们移动到一个新的subkid
时,就会重置nmiss
和last\u nonmissing
data want;
set have;
by subjid;
retain last_nonmissing_dat
last_nonmissing_avisit
;
if(first.subjid) then call missing(nmiss, of last_nonmissing:);
if(missing(dat)) then nmiss+1;
else do;
nmiss = 0;
last_nonmissing_dat = dat;
last_nonmissing_avisit = avisit;
end;
if(nmiss GE 2) then output;
format last_nonmissing_dat yymmdd10.;
run;
每当连续缺失的
dat
计数大于或等于2时,下面将创建一个包含最后一个非缺失的dat
的数据集。每次遇到缺失的dat
,我们都会将连续缺失计数器nmiss
增加1
我们总是将dat
的最后一个有效值存储在变量last\u nonmissing\u dat
和last\u nonmissing\u avisit
中,以便在遇到缺失值时,它们总是结转。当出现两个连续的缺失值时,我们输出结果
每当我们移动到一个新的subkid
时,就会重置nmiss
和last\u nonmissing
data want;
set have;
by subjid;
retain last_nonmissing_dat
last_nonmissing_avisit
;
if(first.subjid) then call missing(nmiss, of last_nonmissing:);
if(missing(dat)) then nmiss+1;
else do;
nmiss = 0;
last_nonmissing_dat = dat;
last_nonmissing_avisit = avisit;
end;
if(nmiss GE 2) then output;
format last_nonmissing_dat yymmdd10.;
run;
这两个缺失值是否需要设置为非缺失值,或者您只是试图创建一个包含这些值的数据集?实际上,不需要将缺失值设置为非缺失值,只需创建一个新数据集即可。感谢您的快速评论。是否需要将两个缺少的值设置为非缺少,或者您只是尝试创建一个包含这些值的数据集?实际上,不需要将缺少的值设置为非缺少,只需创建一个新数据集即可。谢谢你的快速评论。非常感谢斯图。实际上,我意识到遗漏了一个关键点:我希望在第一次连续遗漏之前,最早的DAT。由于您的逻辑,我可以使用下面的代码找到这些信息,如果您能指导我如何修改数据步骤以实现这一点,那会更好:
proc sql;选择不同的SubjectID,min(最后一个非缺失数据)作为adt格式=yymmdd10。按subcid从want组中删除;退出代码>当前使用SQL作为第二步执行此操作的方式可能是最简单的方式。这一切都可以在单个数据步骤中完成,但这可能会大大增加其复杂性。两步法是两者之间很好的平衡。非常感谢斯图。实际上,我意识到遗漏了一个关键点:我希望在第一次连续遗漏之前,最早的DAT。由于您的逻辑,我可以使用下面的代码找到这些信息,如果您能指导我如何修改数据步骤以实现这一点,那会更好:proc sql;选择不同的SubjectID,min(最后一个非缺失数据)作为adt格式=yymmdd10。按subcid从want组中删除;退出代码>当前使用SQL作为第二步执行此操作的方式可能是最简单的方式。这一切都可以在单个数据步骤中完成,但这可能会大大增加其复杂性。两步法是两者之间的良好平衡。