Sas 如果我没有';你不能访问创建它的机器吗?

Sas 如果我没有';你不能访问创建它的机器吗?,sas,Sas,我的Windows 7/SAS 9.4计算机上有许多SAS数据集: data_19921.sas7bdat data_19922.sas7bdat data_19923.sas7bdat .... data_200212.sas7bdat 等。格式为data_YYYYM.sas7bdat或data_YYYYM.sas7bdat(后者表示两位数月),每个数据集都有相同的变量和格式。我试图迭代所有这些文件,并将它们附加到一个大的SAS数据集中。这些数据集是在我公司其他地方的某台Unix机器上创建的

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

data_19921.sas7bdat
data_19922.sas7bdat
data_19923.sas7bdat
....
data_200212.sas7bdat
等。格式为
data_YYYYM.sas7bdat
data_YYYYM.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;
我得到的错误是

无法更新.data_19921中的文件,因为其编码与会话编码不匹配,或者该文件的格式是其他主机(如LINUX_32、INTEL_ABI)的本机格式

我没有权限访问创建这些数据集的Unix机器(或现在的任何Unix机器),因此我认为我不能使用


如何在Windows计算机上读取/附加这些数据集?

您可以使用冒号运算符或破折号来缩短流程:

data out.alldata;
    set in.data_:;
run;

如果你有不同长度的变量,你可能会被截断。SAS将警告您: 警告:输入数据集为变量名指定了多个长度。今年五月 导致数据截断

避免这种情况的一种方法是首先使用原始表创建一个假表。下面的SQL代码将生成CREATETABLE语句,您可以根据需要手动修改长度

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;

您可以使用冒号运算符或破折号来缩短流程:

data out.alldata;
    set in.data_:;
run;

如果你有不同长度的变量,你可能会被截断。SAS将警告您: 警告:输入数据集为变量名指定了多个长度。今年五月 导致数据截断

避免这种情况的一种方法是首先使用原始表创建一个假表。下面的SQL代码将生成CREATETABLE语句,您可以根据需要手动修改长度

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;

您可以使用冒号运算符或破折号来缩短流程:

data out.alldata;
    set in.data_:;
run;

如果你有不同长度的变量,你可能会被截断。SAS将警告您: 警告:输入数据集为变量名指定了多个长度。今年五月 导致数据截断

避免这种情况的一种方法是首先使用原始表创建一个假表。下面的SQL代码将生成CREATETABLE语句,您可以根据需要手动修改长度

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;

您可以使用冒号运算符或破折号来缩短流程:

data out.alldata;
    set in.data_:;
run;

如果你有不同长度的变量,你可能会被截断。SAS将警告您: 警告:输入数据集为变量名指定了多个长度。今年五月 导致数据截断

避免这种情况的一种方法是首先使用原始表创建一个假表。下面的SQL代码将生成CREATETABLE语句,您可以根据需要手动修改长度

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;


通常,CEDA会处理这个问题,只是在日志中添加一个警告,但仍然会继续。您使用的是哪个版本的SAS?@Reese我正在Windows 7上使用SAS 9.4(请参阅我的第一句话)。通常CEDA会处理这个问题,只是在日志中添加一个警告,但仍会继续。您使用的是哪个版本的SAS?@Reese我正在Windows 7上使用SAS 9.4(请参阅我的第一句话)。通常CEDA会处理这个问题,只是在日志中添加一个警告,但仍会继续。您使用的是哪个版本的SAS?@Reese我正在Windows 7上使用SAS 9.4(请参阅我的第一句话)。通常CEDA会处理这个问题,只是在日志中添加一个警告,但仍会继续。你使用的是什么版本的SAS?@Reese我在Windows7上使用的是SAS 9.4(见我的第一句话)。你一定是在开玩笑吧。这太棒了,我想这正是我需要的。这是否会截断任何数据,例如,如果一个数据集的变量
x
是str2变量,而另一个数据集的
x
是str3变量?我习惯于Stata,它会自动扩展数据类型而无需截断。你可以得到截断。我将修改答案以显示一种避免这种情况的方法,这只有在没有太多变量的情况下才可行。您还可以使用sashelp.vcolumn视图查看这些表中的每个变量,获得最大长度。从那以后,创建
假数据表的宏将非常简单(这是一个很好的后续问题)。这太棒了,我想这正是我需要的。这是否会截断任何数据,例如,如果一个数据集的变量
x
是str2变量,而另一个数据集的
x
是str3变量?我习惯于Stata,它会自动扩展数据类型而无需截断。你可以得到截断。我将修改答案以显示一种避免这种情况的方法,这只有在没有太多变量的情况下才可行。您还可以使用sashelp.vcolumn视图查看这些表中的每个变量,获得最大长度。从那以后,创建
假数据表的宏将非常简单(这是一个很好的后续问题)。这太棒了,我想这正是我需要的。这是否会截断任何数据,例如,如果一个数据集的变量
x
是str2变量,而另一个数据集的
x
是str3变量?我习惯于Stata,它会自动扩展数据类型而无需截断。你可以得到截断。我将修改答案以显示一种避免这种情况的方法,这只有在没有太多变量的情况下才可行。您还可以使用sashelp.vcolumn视图查看这些表中的每个变量,获得最大长度。从那以后,创建
假数据表的宏将非常简单(这是一个很好的后续问题)。这是