我对SAS编程完全陌生,因此请原谅这个问题。我正在尝试使用SAS sftp将文件从Linux发送到Windows服务器。我能够传输文件,但目标文件具有行定界符LF,而我们的工作是期望文件具有CRLF定界符。我尝试使用termstr选项,但失败,并显示错误“无效选项termstr”。下面是我的代码
filename out-file sftp 'file.txt' cd='/project/dir'
host='hostname' recfm=v
user=user1;
data _null_;
file out-file TERMSTR=crlf;
do i=1 to i=10;
put i=;
end;
run;
答案 0 :(得分:2)
您的程序正在使用无效的fileref值。您不能在SAS名称中使用连字符。
您可以在FILENAME或FILE语句上使用TERMSTR =选项来更改行尾字符。
我认为SFTP始终将文件移动为二进制文件。您可以尝试更改SFTP选项以确保它正在执行此操作。尝试删除recfm=v
选项。
注意:文本文件具有换行符,而不是记录定界符。如果您正在编写某种类型的专有二进制文件格式,则可以将数据行之间的字符视为记录定界符,但是如果您认为文本文件中的行是分隔的而不是终止的,这只会引起混乱。
答案 1 :(得分:1)
TERMSTR
是INFILE
语句的选项,FILE
语句没有相应的选项。
尝试将PUT
与十六进制字符串一起使用并保留输出(@
)
PUT I= '0d0a'x @;
摘自SAS文档
(系统)选项值的十六进制值必须以数字(0–9)开头,并且必须后跟X。例如,以下OPTIONS语句使用十六进制数字将行大小设置为160:
options linesize=0a0x;
十六进制数字的字符分配需要引号:
options formchar='a0'x;
SAS Constants in Expressions 上的其他阅读内容将显示
Character Constants Expressed in Hexadecimal Notation
SAS字符常量可以用十六进制表示法表示。字符十六进制常数是用单引号或双引号引起来的偶数个十六进制字符的字符串,后跟一个X
和
Numeric Constants Expressed in Hexadecimal Notation
用十六进制值表示的数字常量,以数字开头(通常为0),后跟更多的十六进制字符,再以字母X结尾。该常数最多可以包含16个有效的十六进制字符(0到9,从A到F)