SAS初學者。我想從我的輸入中刪除一個變量列表。該列表本身作爲另一個數據集中的觀察值存在。做了一些Google搜索之後,我發現了關於該主題的優秀論文。使用包含varname列表的宏變量刪除變量
http://www2.sas.com/proceedings/sugi30/028-30.pdf
所以我用下面的代碼,以使在宏變量列表:
/*make a list of variables as a macro variable */
data _null_;
length allvars $1000;
retain allvars ' ';
set to_drop end=eof;
allvars = trim(left(allvars))||' '||left(_name_);
if eof then call symput('varlist', allvars);
run;
我現在面臨着三個問題:)
1當我%PUT &VARLIST
,日誌只顯示31個變量,而我的列表實際上是2000多個變量。
2)我不清楚明白:trim(left(allvars)) || ' ' || left(_name_);
在做什麼。我知道修剪刪除前導空格,左邊是對齊左邊的字符串,但不能理解完整的語句。
3)然後我嘗試使用下面的代碼,我得到一個警告消息,並且降不發生從我inputds砸:
data inputds2 (drop = &varlist);
set inputds;
run;
WARNING: The variable avg_weighted in the DROP, KEEP, or RENAME list has never been referenced.
NOTE: There were 43662 observations read from the data set WORK.INPUTDS.
NOTE: The data set WORK.INPUTDS2 has 43662 observations and 3465 variables.
在現實中我的變量名讀起來像:avg_weighted_minutes_view_3739 avg_weighted_minutes_view_7963 avg_weighted_minutes_view_(XXXX)最後4位數字是隨機的。由於我的標籤包含空格,因此是SAS生成的名稱。
編輯:嘗試使用另一個部分工作的代碼 - 它使一個更大的列表 - 在VARIOIST宏變量中的2000+個變量的2000個變量中有1000個左右。
data _null_;
set to_drop;
call symput('varlist',trim(
resolve('&varlist')
)||' '||trim(_name_));
run;
%put &varlist;
感謝您的系統答覆。 to_drop包含一個名爲_TYPE_的變量,它們不在inputd中。但是,創建常用名稱列表的SQL代碼不起作用 - 返回0個觀察值的表。我認爲問題與b.name一樣在輸入變量名稱是實際的變量名稱。 – vagabond 2015-01-15 17:07:20
如果我可以將類型從to_drop中刪除,我可能會在家 – vagabond 2015-01-15 17:07:40
我只記得'dictionary.columns'中的'memname'變量是全部大寫的。所以你需要'b.memname ='INPUTDS''來代替。編輯我的答案。請再次嘗試SQL位,看看它是否適用於您。 – 2015-01-15 17:12:45