我正在尝试将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
我知道为什么我只能在数据中找到分隔符的一部分????
谢谢, 萨姆。
答案 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标志进行编辑,因此您不必输入两次文件名。
这是一个比大宏更简单,更简单的单线解决方案。