【发布时间】:2015-02-27 16:10:11
【问题描述】:
我正在处理一个相当大的几个数据集,这些数据集以 CSV 文件的形式提供给我。当我尝试导入其中一个文件时,数据会很好,但是文件中的变量数量对于 SAS 来说太大了,因此它停止读取变量名称并开始为它们分配序号。为了维护数据集的变量名称,我在文件中读取的数据行从 1 开始,因此它没有将第一行读取为变量名称 -
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。
-
您应该直接导入 CSV,而不是使用 XLSX 作为中介,这会导致您的变量数量出现问题。
标签: sas