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

时间:2017-01-22 06:17:14

标签: sas conditional proc-sql

我有一个数据集,我想逐行创建一个滚动条件语句(不确定在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'和频率'这将为每个专栏提供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

1 个答案:

答案 0 :(得分:0)

使用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