【问题标题】:SAS File <lib>.<dataset>.DATA does not exist but proc datasets shows datasetSAS 文件 <lib>.<dataset>.DATA 不存在,但 proc datasets 显示数据集
【发布时间】:2015-09-15 14:52:44
【问题描述】:

我正在尝试将 SAS 数据集从客户端移动到我们的 Linux 服务器。他们在 SAS 9.4、64 位 Windows 7 上创建它。我在 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 并创建输入语句,但如果必须的话。感谢您的帮助。

谢谢, 科里

【问题讨论】:

    标签: sas


    【解决方案1】:

    如果您谈论的是实际的 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
    

    【讨论】:

    • Tom,我多年来一直在 unix 中使用 SAS,从未遇到过这个问题。可能是因为在此之前我从未需要从客户端获取 SAS 数据集。它们是内部制造的。我们最终使用 CPORT + CIMPORT 来完成工作,但我一定会记住这一点!谢谢。我注意到一个名为“EFIOUT”的额外字段。不确定这是客户端用于导出数据的过程的产物还是什么,但其余的看起来不错。
    【解决方案2】:

    在这种情况下,我通常会收到有关 CEDA 的注释,但不会丢失数据。

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

    尝试引用全部大写的数据,我认为这不是问题,但有可能。

    【讨论】:

    • 我已经尝试了所有的大写字母。我让客户使用 proc export 作为另一个选项重新发送 .dat 或 .csv。
    • 这绝对是一个选择。 CPORT 和 XPORT 就是为这种情况而设计的。
    • 谢谢瑞萨。我们最终使用了 CPORT/CIMPORT。汤姆在下面指出了为什么它不起作用。
    【解决方案3】:

    我会尝试直接在 libname 上使用 PROC COPY,因为您可以通过这种方式选择 memtype=data 而无需明确指定文件。

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

    【讨论】:

      【解决方案4】:

      尝试使用PROC CPORTPROC CIMPORT

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

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

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

      根据SAS,一般程序是:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 2015-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多