将SAS DataSet导出为UNIX作为文本文件....带分隔符'〜|〜'

时间:2013-01-30 16:02:32

标签: unix sas

我正在尝试将SAS数据集导出到UNIX文件夹作为文本文件,并将分隔符设置为“〜|〜”。

Here is the code I'm using....
PROC EXPORT DATA=Exp_TXT
         OUTFILE="/fbrms01/dev/projects/tadis003/Export_txt_OF_New.txt"
         DBMS=DLM REPLACE;
     DELIMITER="~|~";
     PUTNAMES=YES;
RUN;

这是我在UNIX上获得的输出.....在数据中缺少分隔符的一部分但是在变量名中获得整个分隔符....

Num~|~Name~|~Age
1~A~10
2~B~11
3~C~12

我知道为什么我只能在数据中找到分隔符的一部分????

谢谢, 萨姆。

3 个答案:

答案 0 :(得分:0)

我的猜测是PROC EXPORT不支持使用多个字符分隔符。通常,列分隔符只是一个字符。因此,您可能需要编写自己的代码来执行此操作。

对于分隔文件,

PROC EXPORT会生成普通的旧SAS代码,然后执行该代码。您应该在SAS日志中看到代码,您可以从中获取代码并根据需要进行更改。

请参阅我对this other question的答案,了解可能对您有帮助的SAS宏。您不能完全按照书面形式使用它,但它应该可以帮助您创建满足您需求的版本。

答案 1 :(得分:0)

在FILE语句的SAS手册页上引用了该问题 http://support.sas.com/documentation/cdl/en/lestmtsref/63323/HTML/default/viewer.htm#n15o12lpyoe4gfn1y1vcp6xs6966.htm

Restriction:Even though a character string or character variable is accepted, only the first character of the string or variable is used as the output delimiter. The FILE DLM= processing differs from INFILE DELIMITER= processing.

然而,(有些版本,无论如何)有一个新的声明,DLMSTR。遗憾的是,您无法在PROC EXPORT中使用DLMSTR,但如果您无法轻松编写变量,则可以从PROC EXPORT生成日志并将其粘贴到程序中并将DELIMITER修改为DLMSTR。您甚至可以动态执行此操作 - 使用PROC PRINTTO生成包含日志的文件,然后读入该文件,解析行号和非代码,将DELIMITER更改为DLMSTR,%包含代码。

答案 2 :(得分:0)

由于您使用的是unix,为什么不使用unix工具来修复它?

您可以使用X语句从sas程序中调用unix命令: http://support.sas.com/documentation/cdl/en/hostunx/61879/HTML/default/viewer.htm#xcomm.htm

导出后,使用sed修复文件

PROC EXPORT DATA=Exp_TXT
         OUTFILE="/fbrms01/dev/projects/tadis003/Export_txt_OF_New.txt"
         DBMS=DLM REPLACE;
     DELIMITER="~";
     PUTNAMES=YES;
RUN;

X sed 's/~/~|~/g' /fbrms01/dev/projects/tadis003/Export_txt_OF_New.txt > /fbrms01/dev/projects/tadis003/Export_txt_OF_New_v2.txt ;

可能需要调整,具体取决于您的unix,但这适用于AIX。某些版本的sed可以使用-i标志进行编辑,因此您不必输入两次文件名。

这是一个比大宏更简单,更简单的单线解决方案。