BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [이중배열] 이중배열을 이용한 관측치별 누적합 구하기(ARRAY)

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 110

data back;
  input A117 A118 A119 A120 A121 A122 A123 A124 A125 A126;
cards;
0 1 1 0 1 1 1 0 1 1
;
 

* 이중배열을 사용하여 누적합 구하기;
* A117 A118 A119 A120 A121
* A122 A123 A124 A125 A126;
* 2*5 배열을 생성하여서 각 열의 누적합을 구하기;

 

DATA BACK1;
 set BACK;
     ARRAY VAR{2,5} A117-A126;
     ARRAY BACK{2};
     DO I=1 TO 2;
        BACK{I}=0;
        DO J=1 TO 5;
           * I=1에서 VAR(1,1)-A117 VAR(1,2)-A118 VAR(1,3)-A119 VAR(1,4)-A120 VAR(1,5)-A121의 합을 구함.;
           BACK{I}+VAR{I,J};
        END;
     END;
RUN;

 

options mprint mlogic;

 

* MACRO를 사용하여 간단히 작성해 보았는데;
*  좀더 프로그램을 손질해야 할듯하네요;

%MACRO BACK;
DATA BACK2;
 SET BACK;
     %DO I=117 %TO 126 %BY 5;
         %DO J=0 %TO 4;        
            %LET JUM=%EVAL!((&I-117)/5);
            VAR%EVAL!(&JUM) + A%EVAL!(&I+&J);
         %END;
     %END;
RUN;
%MEND;
%BACK;

 

 

 

[질문]

매크로를 다루면 프로그램이 상당히 간단해 진다는 말을 듣고 이제 막 공부를 시작했는데요.

기본개념 없이 인터넷에 여기저기 나와있는 코드만 보고 공부해서 그런지 한계가 있네요 ㅜㅠ

코드 내용은 변수이름 A117 부터 A146까지에

6년에 걸쳐서 5개의 재무변수가 존재 하는지 안하는지의 정보가 저장되어 있습니다.

(존재 하지 않으면 1, 존재하면0)

즉 1년에 5개씩 총 30개의 변수가 있습니다.

이 30개의 변수를 순서대로 5개씩 합쳐서 새로운 변수를 만들고 싶습니다.

예를 들어서

 

A117   A118   A119   A120   A121        |     A122   A123   A124   A125   A126

       0          1          1          0          1        |            1          1          0          1          1

 

이라는 데이터 셋이 있으면 새로운 변수 P0, P1은 각각

3, 4 라는 값을 갖도록 만들고 싶습니다.

 

 

밑에는 제가짠 코드인데 허접합니다.

물론 안돌아가고요 ㅜㅠ

 

*FINANCIAL년도 별 유무 체크;
DATA cleaning3; set cleaning2;
 
 %MACRO P(I=117);
     C=&I;
     D=%EVAL!(&I+4);
     %DO TH=0 %TO 5;
           P&TH=0;
           %DO YEAR=C %TO D;
                 P&TH=%EVAL!(P&TH+A&YEAR);
           %END;
           C=%EVAL!(C+5);
           D=%EVAL!(D+5);
     %END;
 %MEND;

 

%P(I=117)
RUN;

 

이건 매크로 변수 설정을 잘못 해줘서 그런가 하고 고친 코든데 이것도 역시 작동을 안합니다.

 


*FINANCIAL년도 별 유무 체크;
DATA cleaning3; set cleaning2;
 
 %MACRO P;
    C=117;
    D=121;
    %DO TH=0 %TO 5;
         P&TH=0;
         %DO YEAR=C %TO D;
                P&TH=P&TH+A&YEAR;
         %END;
         C=C+5;
         D=D+5;
    %END;
 %MEND;

%P
RUN;

 

제가 뭘 모르고 있는 걸까요?

 

에러 메시지는 이렇게 뜹니다.

ERROR: A character operand was found in the %EVAL! function or %IF condition where a numeric
       operand is required. The condition was: C
ERROR: The %FROM value of the %DO YEAR loop is invalid.
ERROR: A character operand was found in the %EVAL! function or %IF condition where a numeric
       operand is required. The condition was: D
ERROR: The %TO value of the %DO YEAR loop is invalid.
ERROR: The macro P will stop executing.
 

 

숫자변수랑 문자변수랑 따로 지정해줘야 하는 건가요? ㅜㅠ 잘 모르겠습니다.

도와주세요 ㅜㅠ

Version history
Last update:
‎06-11-2020 04:06 AM
Updated by:
Contributors

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

Article Labels
Article Tags