포스팅 목차
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.
숫자변수랑 문자변수랑 따로 지정해줘야 하는 건가요? ㅜㅠ 잘 모르겠습니다.
도와주세요 ㅜㅠ
* 통계분석연구회 : http://cafe.daum.net/statsas
* 백승민홈페이지 : http://www.statwith.pe.kr
'SAS' 카테고리의 다른 글
[MACRO] MACRO내용 확인 및 저장(%COPY) (0) | 2011.02.18 |
---|---|
Firth logistic regression (SAS and R) (0) | 2011.02.18 |
[GRADAR] GARADAR 넓이(비율) 조정 (0) | 2011.02.18 |
데이터 중복제거(first. / last대안) - MAX , MIN (0) | 2011.02.15 |
[ODS] 페이지 나누기 옵션(STARTPAE) (0) | 2011.01.19 |
댓글