SAS - proc导入/导出物理文件不存在

时间:2017-12-01 11:48:43

标签: sas

我尝试从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.

......当它显然不存在时(我既看不到也不再重新进口)。

我错过了什么?我的代码中是否有明显的错误?

1 个答案:

答案 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。

此致