SAS比较新,但遇到了一个不寻常的问题。我使用一些proc sql语句来动态创建基于最新月份的变量。我想要检索的表格在它们中间有一个月份名称,我想循环浏览。 例如LIBRARY.TABLE_JAN17_ALL LIBRARY.TABLE_DEC16_ALL等SAS - 在表名中使用变量
例如代码:
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;
以前,我用这个逻辑用于表名,其中结局是MONTHNAME即LIBRARY_TABLEACC_JAN17 - > LIBRARY.TABLEACC_ & vMonth。 我对此没有任何问题,但现在变量位于表名中间,出现错误。 错误:文件LIBRARY.TABLE_JAN17.DATA不存在。
如果我使用下面的代码,它工作正常,但我想至120个月的数据环所以不想&年单独命名每个月份。
%Let vMonth2 = JAN17;
proc sql;
create table abc as
select * from LIBRARY.TABLE_&vMonth2._ALL ;
任何人都可以告诉问题是什么?
谢谢。
谢谢汤姆,修剪关键字工作。我正在使用trim(monthName),但之后没有意识到它有空白。 – mugenheimer