如果我无法访问创建它的计算机,如何使用以不同格式(Linux / Windows)创建的SAS文件?

时间:2014-12-31 00:00:16

标签: sas

我的Windows 7 / SAS 9.4计算机上有很多SAS数据集:

data_19921.sas7bdat
data_19922.sas7bdat
data_19923.sas7bdat
....
data_200212.sas7bdat

等。格式为data_YYYYM.sas7bdatdata_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机器上读取/附加这些数据集?

1 个答案:

答案 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;