SAS:保留具有指定日期间隔的观察结果
我有一个看起来像这样的数据集:SAS:保留具有指定日期间隔的观察结果,sas,sas-macro,Sas,Sas Macro,我有一个看起来像这样的数据集: Unique_ID Date 1 03/23/1995 1 03/27/1995 1 04/14/1995 1 08/29/1995 1 02/14/1996 . . . . . . 1 03/19/1997 2
Unique_ID Date
1 03/23/1995
1 03/27/1995
1 04/14/1995
1 08/29/1995
1 02/14/1996
. .
. .
. .
1 03/19/1997
2 10/20/1993
. .
. .
. .
2 04/20/2000
在每个唯一的_ID中,我只需要保留那些从第一次观察开始至少相隔3个月的观察结果(我的数据集按唯一的_ID和日期排序)。例如,在Unique_ID 1中,我需要保留从1995年3月23日起至少90天的下一次观察,然后是从该日起90天的下一次观察,依此类推。有人能用宏或某种循环给我指出正确的方向吗?你可以试试这样的方法:
data want;
set have;
by ID;
retain date2find;
if first.ID then do;
output; /* This statement will include the first obs from each */
/* set of IDs if desired. If not, delete this statement. */
date2find = DATE + 90;
end;
if DATE >= date2find then do;
output; /* Output the found record */
date2find = DATE + 90; /* Re-set to date to be found */
end;
drop date2find;
run;
这取决于您的数据集按所述进行排序(按ID和日期)+1,尽管我认为OP也想保留第一条记录。@Cyborgx37很好,这还不清楚。我会更新答案。@Bob Duell谢谢你的解决方案!我不知道retain语句可以这样使用。retain就是这样做的[防止在每个数据步骤循环开始时重新初始化变量]。其他用途是简单地使用RETAIN相对简单的语法(比如使用它对数据集上的变量重新排序)。SAS中最重要的循环是您每天使用的循环。。。数据步循环!