使用sas从主表中有效提取每个id和月份的最近12个月数据
我目前正在使用两个SAS数据集(sample和master)进行SAS编程。下面是为说明而创建的假设或虚拟数据,用于通过SAS编程解决我的问题。我想从主数据集中提取样本数据集中id的数据。我给出了一个示例,其中很少有id作为示例数据集,对于该示例,我需要根据yearmonth信息(第三个输出中给出的期望输出)从主表中提取每个id的最近12个月信息 与此类似,我有许多列,每个id和yearmonth都需要12个月的数据 我用do循环编写了一段代码,迭代样本数据集的每一行,然后从开始(yearmonth)和结束日期(12个月前)在主表中查找数据对于每个迭代,然后使用proc transpose将其转置。然后使用数据步骤merge使用id和yearmonth将样本数据集与转置数据合并。但是我觉得我编写的代码没有得到优化,因为它对样本数据集中的每一行进行了多次删除,并从主表中查找数据。有人能在solvin方面帮助我吗用优化的方法用SAS编程解决这个问题使用sas从主表中有效提取每个id和月份的最近12个月数据,sas,Sas,我目前正在使用两个SAS数据集(sample和master)进行SAS编程。下面是为说明而创建的假设或虚拟数据,用于通过SAS编程解决我的问题。我想从主数据集中提取样本数据集中id的数据。我给出了一个示例,其中很少有id作为示例数据集,对于该示例,我需要根据yearmonth信息(第三个输出中给出的期望输出)从主表中提取每个id的最近12个月信息 与此类似,我有许多列,每个id和yearmonth都需要12个月的数据 我用do循环编写了一段代码,迭代样本数据集的每一行,然后从开始(yearmon
ID年月客户号
1 200909 50
1 201005 65
1 201008 78
1 201106 95
2 200901 65
2 200902 45
2 200903 69
2 201005 14
2 201006 26
2 201007 98
3 201011 75
3 201012 75
如果没有到目前为止您一直尝试执行的示例代码,则有点难以确定您想要什么,但获得与图像文件相同结果的“SAS”方法可能如下所示
编辑:编辑了我的答案,所以它需要过去12个月的ID
data test;
infile datalines dlm='09'x;
input ID YEARMONTH NO_OF_CUST;
datalines;
1 200808 125
1 200809 125
1 200810 111
1 200811 174
1 200812 98
1 200901 45
1 200902 74
1 200903 73
1 200904 101
1 200905 164
1 200906 104
1 200907 22
1 200908 35
1 200909 50
1 200910 77
1 200911 86
1 200912 95
1 201001 95
1 201002 87
1 201003 79
1 201004 71
1 201005 65
1 201006 66
1 201007 66
1 201008 78
1 201009 88
1 201010 54
1 201011 45
1 201012 100
1 201101 136
1 201102 111
1 201103 17
1 201104 77
1 201105 111
1 201106 95
1 201107 79
1 201108 777
1 201109 758
1 201110 32
1 201111 15
1 201112 22
2 200711 150
2 200712 150
2 200801 44
2 200802 385
2 200803 65
2 200804 66
2 200805 200
2 200806 333
2 200807 285
2 200808 265
2 200809 222
2 200810 220
2 200811 205
2 200812 185
2 200901 65
2 200902 45
2 200903 69
2 200904 546
2 200905 21
2 200906 256
2 200907 214
2 200908 14
2 200909 44
2 200910 65
2 200911 88
2 200912 79
2 201001 65
2 201002 45
2 201003 69
2 201004 54
2 201005 14
2 201006 26
2 201007 98
3 200912 77
3 201001 66
3 201002 69
3 201003 7
3 201004 7
3 201005 7
3 201006 65
3 201007 75
3 201008 85
3 201009 89
3 201010 100
3 201011 75
3 201012 75
;
run;
proc sort data=test;
by id yearmonth;
run;
data result;
set test;
array prev_month {13} PREV_MONTH_0-PREV_MONTH_12;
by id;
if first.id then do;
do i = 1 to 13;
prev_month(i) = 0;
end;
end;
do i = 13 to 2 by -1;
prev_month(i) = prev_month(i-1);
end;
prev_month(1) = NO_OF_CUST;
drop i PREV_MONTH_0;
retain PREV_MONTH:;
run;
如果您将这些图像替换为文本表,我们可以将您的字段名复制并粘贴到我们的答案中。示例:另外,由于您的问题涉及编写优化代码,而不是特定的编程问题,您可能希望尝试在此处提问:1.您已将数据作为图像包含。对于我们使用此数据,我们没有o把它打出来。2.到目前为止,你还没有发布任何代码,表明你试图解决这个问题。3.这不仅仅是关于重新格式化数据,你需要说明你需要的计算逻辑。4.这不是一个有效的so问题,因为它更像是一个完整的作业和你的工作。你可以问具体的问题,但这是一种方式太宽泛了。虽然还不清楚您想要什么,但听起来您需要为数据集编制索引。查看一下,看看这是否回答了您的问题编辑了问题并粘贴了数字而不是图像。此外,我已经给出了我采用的编码方法。谢谢,提取以前12个月的数据效果很好。需要更改什么如果我想提取下一个12个月的数据,如何获取下一个12个月的记录,如前一个12个月的数据,在排序中在yearmonth变量之前添加decenting