2017-01-22 6 views
0

데이터 집합이 있는데 행별로 롤링 조건문을 만들려고합니다 (정확한 용어가 SAS에서 무엇인지 불분명 함). 엑셀에서 어떻게하는지 알고 있지만 SAS에서 어떻게 실행되는지는 잘 모릅니다. 다음은 데이터 세트와 내가 성취하고자하는 것입니다.SAS 롤링 조건문 (Excel과 비슷 함)

데이터

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

내가 각 열 'A'와 양이 사라져 또는 여부 '날짜'를 제공 할 'X'와 '주파수'의 이름에이 열을 싶습니다 설정 아래로 그리고 얼마만큼. 아래 샘플 출력을보십시오. Lag1를 사용

----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 
+0

는'LAG()'또는'DIF() '기능의 간단한 애플리케이션처럼 보인다. 그걸 사용해 보셨어요? – Tom

답변

0

예()

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