我的Windows 7 / SAS 9.4计算机上有很多SAS数据集:
data_19921.sas7bdat
data_19922.sas7bdat
data_19923.sas7bdat
....
data_200212.sas7bdat
等。格式为data_YYYYM.sas7bdat
或data_YYYYMM.sas7bdat
(后者为两位数月份),每个数据集都具有相同的变量和格式。我正在尝试迭代所有这些文件并将它们附加到一个大的SAS数据集中。数据集是在我公司其他地方的某台Unix机器上创建的,我无法访问。当我尝试附加文件时:
%let root = C:\data;
libname in "&raw\in";
libname out "&raw\out";
/*****************************************************************************/
* initialize final data set but don't add any observations to it;
data out.alldata;
set in.data_19921;
stop;
run;
%macro append_files;
%do year=1992 %to 2002;
%do month=1 %to 12;
proc append data=out.alldata base=in.data_&year&month;
run;
%end;
%end;
%mend;
%append_files;
我收到错误说
无法更新文件in.data_19921,因为其编码与会话编码不匹配,或者文件采用其他主机的本机格式,例如LINUX_32,INTEL_ABI
我无法访问创建这些数据集的Unix机器(或者现在的任何Unix机器),所以我认为我不能使用proc cport
and proc cimport
。
如何在Windows机器上读取/附加这些数据集?
答案 0 :(得分:3)
您可以使用冒号运算符或短划线来快捷处理您的流程:
data out.alldata;
set in.data_:;
run;
OR
data out.alldata;
set in.data19921-in.data200212;
run;
如果您有不同长度的变量,则可能会出现截断。 SAS会警告你: 警告:通过输入数据集为变量名指定了多个长度。这可能 导致数据截断。
避免它的一种方法是首先使用原始表创建一个假表。以下SQL代码将生成CREATE Table语句,您可以根据需要手动修改长度。
proc sql;
describe table in.data19921;
quit;
*run create table statement here with modified lengths;
data out.alldata;
set fake_data (obs=0)
in.data19921-in.data200212;
run;