我正在處理一個相當大的幾個數據集,這些數據集以CSV文件形式提供給我。當我嘗試導入其中一個文件時,數據將正常顯示,但是,文件中的變量數量對於SAS來說太大,因此它會停止讀取變量名稱並開始爲它們分配順序編號。爲了保持變量名關數據集的我開始對1數據行讀取文件中的所以也沒看第一行作爲變量名 -設置SAS數據集的標籤等於它們的變量名稱
proc import file="X:\xxx\xxx\xxx\Extract\Live\Live.xlsx" out=raw_names dbms=xlsx replace;
SHEET="live";
GETNAMES=no;
DATAROW=1;
run;
然後我運行一個宏來啓動打破數據集,並重新命名變量,根據每個變量中的第一個意見 -
%macro raw_sas_datasets(lib,output,start,end);
data raw_names2;
raw_names;
if _n_ ne 1 then delete;
keep A -- E &start. -- &end.;
run;
proc transpose data=raw_names2 out=raw_names2;
var A -- &end.;
run;
data raw_names2;
set raw_names2;
col1=compress(col1);
run;
data raw_values;
set raw;
keep A -- E &start. -- &end.;
run;
%macro rename(old,new);
data raw_values;
set raw_values;
rename &old.=&new.;
run;
%mend rename;
data _null_;
set raw_names2;
call execute('%rename('||_name_||","||col1||")");
run;
%macro freq(var);
proc freq data=raw_values noprint;
tables &var./out=&var.;
run;
%mend freq;
data raw_names3;
set raw_names2;
if _n_ < 6 then delete;
run;
data _null_;
set raw_names3;
call execute('%freq('||col1||")");
run;
proc sort data=raw_values;
by StudySubjectID;
run;
data &lib..&output.;
set raw_values;
run;
%mend raw_sas_datasets;
我遇到的問題是變量名稱現在所有的設置是否正常,數據正確一字排開,但標籤仍然是SAS分配的原始序列號。有什麼辦法可以將所有的標籤設置爲等於變量名稱嗎?
很可能SAS的變量數量不是太大(我從來沒有見過這種情況是真的),但變量名的行對於LRECL來說太長了。我也希望你沒有使用XLSX。 – Joe
您應直接導入CSV並且不要將XLSX用作中介,這會導致您的變量數量出現問題。 – Reeza