我尝试从SAS导入/导出文件,而不使用导出向导。
据我了解,我的公司在 unix 服务器上运行SAS,而我想要一个Windows驱动器。我们在Citrix环境中使用SAS EG。
根据我们的IT人员的说法,有一个UNIX目录映射到Windows驱动器(反之亦然?),我应该能够访问SAS中的以下目录:
/sas_p/gridshared/sh/eg_data/b036081/
这是我到目前为止所得到的:
proc export
data=work.exp1
outfile="/sas_p/gridshared/sh/eg_data/b036081/exp1_test.csv" dbms=csv;
run;
这会产生错误:
ERROR: Physical file does not exist, /sas_p/gridshared/sh/eg_data/b036081/exp1_test.csv.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 1 observations read from the data set WORK.EXP1.
0 records created in /sas_p/gridshared/sh/eg_data/b036081/exp1_test.csv from WORK.EXP1.
然而,在日志的下方告诉我文件已成功创建
NOTE: "/sas_p/gridshared/sh/eg_data/b036081/exp1_test.csv" file was successfully created.
......当它显然不存在时(我既看不到也不再重新进口)。
我错过了什么?我的代码中是否有明显的错误?
答案 0 :(得分:1)
您应该在导出之前检查文件夹是否存在。
具有以下功能:
/**
*
* @dev Function to check if a file/folder is existing
* @param dsn The pathname of the file/folder to be checked
*
*/
%macro checkFile(dsn /*Enter a pathname Ex: C:\myfile.txt */);
%if %sysfunc(fileexist(&dsn)) %then
%do;
%put &dsn. exists.;
data _null_;call symputx("checkFile",1,'G');run;
%end;
%else
%do;
%put &dsn. not exists.;
data _null_;call symputx("checkFile",0,'G');run;
%end;
%mend checkFile;
%checkFile("/sas_p/gridshared/sh/eg_data/b036081/");
%put checkFile=&checkFile;
您的导出
%checkFile("/sas_p/gridshared/sh/eg_data/b036081/exp1_test.csv");
%put checkFile=&checkFile;
它将为您提供有关日志中文件夹的信息。 重试proc导出后。因为如果文件夹存在,则没有理由失败。
并在创建输出时重做checkFile。 不要太担心警告信息,SAS有时会给你错误的信息。实际上,您的文件未创建,但SAS确实会给您一条消息,说它没问题。
如果没有创建文件,请联系管理员,这肯定是访问问题。因为你确实使用了proc导出,尊重duble quote和/ for linux environement system。
此致