我试图将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并创建输入语句,但如果必须的话。感谢您的帮助。
谢谢, 科里
答案 0 :(得分:2)
在这种情况下,我通常会收到关于CEDA的说明而不会丢失数据。
使用关联的proc,PROC CPORT或XPORT创建CPORT或XPORT文件,然后移动该文件。
尝试引用所有大写的数据,我认为不应该是问题,但是可能。
答案 1 :(得分:2)
如果您正在讨论实际的SAS数据集,请确保该文件的名称全部为小写字母,并且扩展名为.sas7bdat。如果来自Windows的源文件没有.sas7bdat的扩展名,那么您可能没有处理SAS数据集,而是处理其他类型的文件。
在SAS代码中,使用大写或小写字母引用数据集无关紧要。因此,您可以将数据集引用为sample_from_SSI
或Sample_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 CPORT
和PROC CIMPORT
。
使用CPORT Procedure将文件转换为传输文件。
使用CIMPORT Procedure将传输文件转换为SAS格式。
有一个例子听起来与你正在做的here类似。
根据SAS的说法,一般程序是:
- 使用PROC CPORT在源计算机上创建传输文件。
- 传输文件通过通信软件或磁介质从源计算机传输到目标计算机
- 使用PROC CIMPORT在目标计算机上读取传输文件。
醇>注意:使用PROC CPORT创建的传输文件不是 可与使用XPORT创建的传输文件互换 发动机。
如果这不起作用,或者需要很长时间才能弄明白,那么要求他们提供CSV并使用PROC IMPORT
直接导入它会更快。它应该很容易阅读,特别是如果它来自PROC EXPORT
。