2

我正在尝试将 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

知道为什么我只在数据中获得分隔符的一部分????

谢谢,山姆。

4

3 回答 3

0

文件语句的 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,并 %include 代码。

于 2013-01-30T20:04:46.540 回答
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 标志在适当位置进行编辑,因此您不必输入两次文件名。

与大宏相比,它是一个更简单、更容易的单行解决方案。

于 2013-02-01T18:59:55.407 回答
0

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

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

请参阅我对其他问题的回答,以获得可能对您有所帮助的 SAS 宏。您不能完全按照所写的方式使用它,但它应该可以帮助您创建满足您需求的版本。

于 2013-01-30T17:16:51.397 回答