SAS文件<lib>。<dataset> .DATA不存在,但proc数据集显示数据集

时间:2015-09-15 14:52:44

标签: sas

我试图将SAS数据集从客户端移到我们的Linux服务器上。他们在Windows 7上使用SAS 9.4,64位创建了它。我在Linux上使用SAS 9.4,64位。

如果我这样做

proc datasets library=din;
run;

我在日志中得到以下内容

Libref             DIN                                
Engine             V9                                 
Physical Name      /sasUsr/DM/DATA/SAS_DATA/201510_SSI
Filename           /sasUsr/DM/DATA/SAS_DATA/201510_SSI
Inode Number       46358529                           
Access Permission  rwxrwxr-x                          
Owner Name         cvandenb                           
File Size (bytes)  4096       

                    Member     File
#  Name             Type       Size  Last Modified

1  SAMPLE_FROM_SSI  DATA     131072  09/14/2015 17:07:01        
2  TEST             DATA     131072  09/15/2015 09:35:59        
15         run;

但是当我做的时候

data test;
    set din.sample_from_SSI;
run;

我得到了

18         data test;
19          set din.sample_from_SSI;
ERROR: File DIN.SAMPLE_FROM_SSI.DATA does not exist.
20         run;

我还创建了一个虚拟数据集din.test,并能够进行打印。这似乎是版本兼容性问题或传输问题。我认为这很简单。有什么建议?我使用WinSCP将文件从Windows移动到Linux。我宁愿不必请求.csv并创建输入语句,但如果必须的话。感谢您的帮助。

谢谢, 科里

4 个答案:

答案 0 :(得分:2)

在这种情况下,我通常会收到关于CEDA的说明而不会丢失数据。

使用关联的proc,PROC CPORT或XPORT创建CPORT或XPORT文件,然后移动该文件。

尝试引用所有大写的数据,我认为不应该是问题,但是可能。

答案 1 :(得分:2)

如果您正在讨论实际的SAS数据集,请确保该文件的名称全部为小写字母,并且扩展名为.sas7bdat。如果来自Windows的源文件没有.sas7bdat的扩展名,那么您可能没有处理SAS数据集,而是处理其他类型的文件。

在SAS代码中,使用大写或小写字母引用数据集无关紧要。因此,您可以将数据集引用为sample_from_SSISample_From_Ssi以引用同一文件。 Windows机器上的常规文件名也是如此。但在Unix系统中,使用大写和小写字母不同的文件名是不同的文件。 SAS要求SAS数据集的文件名必须全部为小写字母。

所以如果你写:

libname DIN '/sasUsr/DM/DATA/SAS_DATA/201510_SSI';
proc print data=DIN.SAMPLE_FROM_SSI;
run;

然后,您希望在名为:

的文件中列出数据
/sasUsr/DM/DATA/SAS_DATA/201510_SSI/sample_from_ssi.sas7bdat

答案 2 :(得分:0)

我会尝试直接在libname上使用PROC COPY,因为您可以选择memtype = data而不明确指定文件。

如果SAS仍然无法做到这一点,那么您可能会遇到权限问题或我怀疑在SAS领域之外的其他问题。

答案 3 :(得分:0)

尝试使用PROC CPORTPROC CIMPORT

  1. 使用CPORT Procedure将文件转换为传输文件。

  2. 使用CIMPORT Procedure将传输文件转换为SAS格式。

  3. 有一个例子听起来与你正在做的here类似。

    根据SAS的说法,一般程序是:

      
        
    1. 使用PROC CPORT在源计算机上创建传输文件。
    2.   
    3. 传输文件通过通信软件或磁介质从源计算机传输到目标计算机
    4.   
    5. 使用PROC CIMPORT在目标计算机上读取传输文件。
    6.         

      注意:使用PROC CPORT创建的传输文件不是   可与使用XPORT创建的传输文件互换   发动机。

    如果这不起作用,或者需要很长时间才能弄明白,那么要求他们提供CSV并使用PROC IMPORT直接导入它会更快。它应该很容易阅读,特别是如果它来自PROC EXPORT