SAS의 새로운 기능이지만 예외적 인 문제가 발생했습니다. 내가 최근 달을 기반으로 변수를 동적으로 생성하는 몇 가지 proc SQL 문을 사용합니다. 검색하려는 테이블은 중간에 한 달 동안 이름이 있으며 루프를 반복하고 싶습니다. 예. LIBRARY.TABLE_JAN17_ALL LIBRARY.TABLE_DEC16_ALL 등SAS - 테이블 이름에 변수 사용
예제 코드 : -> LIBRARY.TABLEACC_ & vMonth 결말이 MONTHNAME 즉 LIBRARY_TABLEACC_JAN17 어디
DATA qtrMonth;
INPUT vDay vMonth vMonthName $;
DATALINES;
31 01 JAN
28 02 FEB
31 03 MAR
30 04 APR
31 05 MAY
30 06 JUN
31 07 JUL
31 08 AUG
30 09 SEP
31 10 OCT
30 11 NOV
31 12 DEC
;
DATA year;
INPUT vYear ;
DATALINES;
14
15
16
17
;
run;
/* Next step is to do a cartesian join to populate
all possible Month & Year combos in the dataset */
PROC SQL;
create table popCalendar as
SELECT
mdy(a.vMonth,a.vDay, b.vYear) as MyDate format DATE9.
,CAT(TRIM(a.vMonthName), b.vYear) as MonthName
FROM qtrMonth a
CROSS JOIN year b
;
quit;
PROC SQL;
create table tmpMax as
Select Max(MyDate) as MaxDate
FROM popCalendar
WHERE MyDate < today();
/*select max monthName into vMonth variable */
SELECT trim(MonthName) into :vMonth
FROM popCalendar a
inner join tmpMAX b on a.MyDate = b.MaxDate;
quit;
/*Select from table using variable*/
proc sql;
create table abc as
select * from LIBRARY.TABLE_&vMonth._ALL;
이전에, 나는 테이블 이름이 논리를 사용했다. 이 문제는 없었지만 변수가 테이블 이름의 중간에 오면 오류가 발생합니다. 오류 : 파일 LIBRARY.TABLE_JAN17.DATA가 존재하지 않습니다.
다음 코드를 사용하면 120 개월의 데이터를 반복하여 각 달마다 개별적으로 이름을 지정하지 않으려 고합니다. & 년.
%Let vMonth2 = JAN17;
proc sql;
create table abc as
select * from LIBRARY.TABLE_&vMonth2._ALL ;
문제는 누구에게 조언 할 수 있습니까?
감사합니다.
트림 된 키워드가 작동했습니다. trim (monthName)을 사용했지만 이후에 공백이 있음을 깨닫지 못했습니다. – mugenheimer