SASには比較的新しいですが、私は珍しい問題を発見しました。私はいくつかのproc SQL文を使って、最新の月に基づいて変数を動的に作成します。私が検索したいテーブルは、その中に月の名前があり、ループしたい。 など。 LIBRARY.TABLE_JAN17_ALL LIBRARY.TABLE_DEC16_ALL等SAS - テーブル名に変数を使用
例コード: - > LIBRARY.TABLEACC_ & vMonth
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.TABLE_JAN17.DATAが存在しません。
私は次のコードを使用するとうまくいきますが、120ヶ月のデータをループしたいので、毎月個別に名前を付けたいとは思わない&年です。
%Let vMonth2 = JAN17;
proc sql;
create table abc as
select * from LIBRARY.TABLE_&vMonth2._ALL ;
問題は何ですか?
ありがとうございました。
ありがとうございました。私はtrim(monthName)を使用していましたが、後で空白があることを認識していませんでした。 – mugenheimer