有關如何修改下面的問題代碼行以獲取無錯誤命名的數據集的任何建議?在哈希數據集語句中使用來自循環宏的變量時的SAS名稱錯誤
我有一個數據集,我想要匹配治療公司(4400)與約48000個行業和14年的控制公司,然後最近的大小沒有更換。我的方法可能有點笨拙,但我正在學習。我將治療和控制數據集分爲48x14組(在此之後,我將嘗試通過某種類型的循環來運行最近的匹配而不更換代碼)。
我已經使用了下面的哈希代碼的一個變體來創建48個數據集out1 ... out48。現在我試圖通過使用下面的代碼,將這48個數據集中的每一個進一步分爲14年。我正在接收一個錯誤數據集創建行,我嘗試創建名爲out12004,out22004,out32004的48x14數據集。 。 .out482013
問題代碼行(大約2/3下面的代碼):hh.output(dataset:'out'|| & || || put(year,best.-L));
SAS的錯誤是這樣的:
錯誤:數值超出12004不是有效的SAS名稱。
錯誤:在「DATASTEP.HASH」的實例方法OM_OUTPUT(505)期間發生錯誤。
以下是完整的代碼(從 Is it possible to loop over SAS datasets?和SUGI30 paper 236-30
%MACRO process_datasets(mdataset);
data &mdataset.;
set &mdataset.;
data _null_ ;
dcl hash hoh (ordered: 'a') ;
dcl hiter hih ('hoh') ;
hoh.definekey ('year') ;
hoh.definedata ('year', 'hh') ;
hoh.definedone() ;
dcl hash hh() ;
do _n_ = 1 by 1 until (eof) ;
set out&i. end = eof ;
if hoh.find() ne 0 then do ;
hh = _new_ hash (ordered: 'a') ;
hh.definekey ('industry','cik', 'year', '_n_') ;
hh.definedata ('industry','cik','year','eventdat', 'at', 'roa') ;
hh.definedone() ;
hoh.replace() ;
end ;
hh.replace() ;
end ;
do rc = hih.next() by 0 while (rc = 0) ;
hh.output (dataset: '_'||&i||put(year, best.-L)) ;
rc = hih.next() ;
end ;
stop ;
run;
data _null_;
file 'tmp.csv' mod dsd dlm=','; *saving everything to the same file;
set &mdataset.;
put (_all_) (+0);
run;
%MEND process_datasets;
%MACRO loop_through_all;
%DO i = 1 %to 48;
%process_datasets(out&i.);
%END;
%MEND loop_through_all;
我用貓('_',「&i。」,year);這解決了它 - 非常感謝。我同意我的方法可能有點麻煩,但考慮到我接下來使用的宏,我仍然認爲我需要單獨的數據集。 – mrlcpa