***********************************************;
* SET문장의 단축 리스트 기능 사용;
* SAS9.2 버젼 이후 사용가능 :
***********************************************;
DATA BACK;
SET BACK1-BACK3;
RUN;
***********************************************;
* 일반적 데이터문장으로 다수의 데이터세트 SET하기 ;
***********************************************;
data BACK1;
a=1;
run;
data BACK2;
a=2;
run;
data BACK3;
a=3;
run;
data BACK;
ARRAY X[*] $ var1-var3;
length var4 $100.;
* BACK1 BACK2 BACK3을 가로로 배치;
do i=1 to 3;
x[i] =compress("BACK"||i);
end;
* 하나의 변수화 작업;
var4 = cat(of var:);
* 매크로 변수로 할당;
call symput('BACK',var4);
run;
* set문에 들어갈 문장을 로그에 출력하여 확인;
%put &BACK;
data BACK4;
set &BACK;
run;
********************************************;
* Macro 사용하기1 ;
********************************************;
%macro set();
%let var1 =;
%do i = 1 %to 3;
%let var1 = &var1 BACK&i;
%end;
data BACK;
set &var1;
run;
%mend;
%set()
********************************************;
* Macro 사용하기2 ;
********************************************;
%macro BACK();
data BACK;
%do i=1 %to 3;
set BACK&i;
output;
%end;
run;
%mend;
%BACK;
********************************************;
* 테이블명 관리 테이블(VTABLE) ;
********************************************;
DATA TEST;
SET SASHELP.VTABLE END=END;
length var $100.;
RETAIN VAR;
IF INDEX(memname,'BACK')>0 THEN VAR = TRIM(VAR)||' '||TRIM(memname);
ELSE VAR=VAR;
IF END THEN CALL SYMPUT('LIST',VAR);
WHERE libname='WORK';
RUN;
%PUT &LIST;
DATA TOTAL1;
SET &LIST;
RUN;
********************************************;
* 테이블명 관리 테이블(DICTIONARY) ;
********************************************;
PROC SQL NOPRINT;
SELECT memname INTO :LIST1 separated by ' '
FROM dictionary.tables
WHERE libname='WORK'
AND memname LIKE 'BACK%';
QUIT;
%PUT &LIST1;
DATA TOTAL2;
SET &LIST;
RUN;
[참고]
* [SAS 변수 리스트] SAS 변수 단체(요약) 지정 : http://cafe.daum.net/statsas/3F8j/187Save $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.