SAS 滚动条件语句(类似于 excel)



我有一个数据集,我想逐行创建一个滚动条件语句(不确定 SAS 中的确切术语是什么)。我知道如何在Excel中执行此操作,但不确定如何在SAS上执行它。以下是数据集和我想要实现的目标。

数据集

----A---- | --Date-- | Amount |
  11111     Jan 2015      1
  11111     Feb 2015      1
  11111     Mar 2015      2
  11111     Apr 2015      2
  11111     May 2015      2
  11111     Jun 2015      1
  11112     Jan 2015      2
  11112     Feb 2015      1
  11112     Mar 2015      1
  11112     Apr 2015      4
  11112     May 2015      3
  11112     Jun 2015      1
我想用"X"和"

频率"的名称提供 2 列,这将为每个列提供"A"和"日期",金额是上升还是下降以及减少多少。请参阅下面的示例输出。

----A---- | --Date-- | Amount | --X-- | Frequency |
  11111     Jan 2015      1       0         0
  11111     Feb 2015      1       0         0
  11111     Mar 2015      2      Add        1
  11111     Apr 2015      2       0         0
  11111     May 2015      2       0         0
  11111     Jun 2015      1      Drop       1
  11112     Jan 2015      2       0         0
  11112     Feb 2015      1      Drop       1
  11112     Mar 2015      1       0         0
  11112     Apr 2015      4      Add        3
  11112     May 2015      3      Drop       1
  11112     Jun 2015      1      Drop       2

使用 Lag1() 的示例:

    Data A;
    input date monyy7. Y $;
    datalines;
    Jan2015 1       
    Feb2015 1      
    Mar2015 2     
    Apr2015 2       
    May2015 2      
    Jun2015 1     
    Jan2015 2      
    Feb2015 1      
    Mar2015 1       
    Apr2015 4      
    May2015 3      
    Jun2015 1  
    ;
    data B;
    set A;
    lag_y=lag1(Y);
    if lag_y = . then X ='missing';
    if Y = lag_y then X='zero';
    if Y > lag_y and lag_y ^= . then x='add';
    if Y < lag_y then x= 'drop';
    freq= abs(Y-lag_y);
    run;

输出:

   Obs date Y lag_y X freq 
   1 20089 1   missing 
   2 20120 1 1 zero 0 
   3 20148 2 1 add 1 
   4 20179 2 2 zero 0 
   5 20209 2 2 zero 0 
   6 20240 1 2 drop 1 
   7 20089 2 1 add 1 
   8 20120 1 2 drop 1 
   9 20148 1 1 zero 0 
  10 20179 4 1 add 3 
  11 20209 3 4 drop 1 
  12 20240 1 3 drop 2 

最新更新