Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sas从主表中有效提取每个id和月份的最近12个月数据_Sas - Fatal编程技术网

使用sas从主表中有效提取每个id和月份的最近12个月数据

使用sas从主表中有效提取每个id和月份的最近12个月数据,sas,Sas,我目前正在使用两个SAS数据集(sample和master)进行SAS编程。下面是为说明而创建的假设或虚拟数据,用于通过SAS编程解决我的问题。我想从主数据集中提取样本数据集中id的数据。我给出了一个示例,其中很少有id作为示例数据集,对于该示例,我需要根据yearmonth信息(第三个输出中给出的期望输出)从主表中提取每个id的最近12个月信息 与此类似,我有许多列,每个id和yearmonth都需要12个月的数据 我用do循环编写了一段代码,迭代样本数据集的每一行,然后从开始(yearmon

我目前正在使用两个SAS数据集(sample和master)进行SAS编程。下面是为说明而创建的假设或虚拟数据,用于通过SAS编程解决我的问题。我想从主数据集中提取样本数据集中id的数据。我给出了一个示例,其中很少有id作为示例数据集,对于该示例,我需要根据yearmonth信息(第三个输出中给出的期望输出)从主表中提取每个id的最近12个月信息

与此类似,我有许多列,每个id和yearmonth都需要12个月的数据

我用do循环编写了一段代码,迭代样本数据集的每一行,然后从开始(yearmonth)和结束日期(12个月前)在主表中查找数据对于每个迭代,然后使用proc transpose将其转置。然后使用数据步骤merge使用id和yearmonth将样本数据集与转置数据合并。但是我觉得我编写的代码没有得到优化,因为它对样本数据集中的每一行进行了多次删除,并从主表中查找数据。有人能在solvin方面帮助我吗用优化的方法用SAS编程解决这个问题

  • 一个示例数据集(数据集名称-示例)
  • 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