SAS中的前一年行数,3组

时间:2017-05-10 11:17:51

标签: sql sas

对于每个Codinv和Class,我想总结一下D列中列出的前几年的值。

谢谢Rigerta。这是我的新请求。现在我考虑到这一点,当每个CodInv每个类只有一行时,它应该显示与D相同的值。因此,我想要一个新列计算如下

 Codinv    Class      year        D       NewColumn   
----------------------------------------------------------
  13       C08F       1977        5         5
  76       C01B       1999        1         1
  76       C21D       2005        2         2
  76       C23C       1998        2         2
  76       C23C       1999        2         4

我会按如下方式更改代码,但仍无法正常工作

当我在线阅读时,我尝试了

data Want;                                                           
set Have;                                                           
by Codinv Class year;                                                             
retain NewColumn;                                              
if first.Class then NewColumn=D; output; 
if last.year NewColumn=NewColumn+D;                             
run;

在我按照Codinv和Year排序的情况下,我必须做的其他分析工作得很好,现在我正在做三个我尝试了不同的变化,但它显示所有行的缺失数据或0 ... Can你救我了?永远感激

1 个答案:

答案 0 :(得分:1)

你接近你的尝试,我已经修改它以产生所需的输出。我所做的更改总结如下:

  • 删除了retain声明。我使用的方法采用自动保留,因此没有必要。
  • 每次课程更改时,将NewColumn初始化为0
  • 为每行添加D到NewColumn。 (x + y,这里使用,创建隐含的保留)
  • 删除了output声明。这在数据步骤结束时暗示,因此不需要。
  • 删除if last.year...行,因为没有必要
  • 严格地说,在by语句中使用年份不是必需的,但保留以确保数据正确排序非常有用。

    data have;
    input Codinv Class $ year D;
    datalines;
    13       C08F       1977        5
    76       C01B       1999        1
    76       C21D       2005        2
    76       C23C       1998        2
    76       C23C       1999        2
    ;
    run;
    
    data Want;                                                           
    set Have;                                                           
    by Codinv Class year;                                                             
    if first.Class then NewColumn=0;
    newcolumn+D;
    run;