如何使用palote字符作为分隔符在sas中创建.txt文件?
我试图创建一个以分隔符“|”作为分隔符的.txt文件,我使用了一个数据步骤,在file语句中,我一直在尝试DLM参数和分隔符,但没有一个像我所希望的那样使用分隔符生成一个.txt文件。正在创建的.txt文件没有任何分隔符。这是我正在使用的代码:如何使用palote字符作为分隔符在sas中创建.txt文件?,sas,Sas,我试图创建一个以分隔符“|”作为分隔符的.txt文件,我使用了一个数据步骤,在file语句中,我一直在尝试DLM参数和分隔符,但没有一个像我所希望的那样使用分隔符生成一个.txt文件。正在创建的.txt文件没有任何分隔符。这是我正在使用的代码: DATA OutputAC.XGFintra; SET XGFintra; FILE "&out_XGFintra." dlm='|' LRECL=32767 ; PUT tip_doc $1. num_doc $11. b
DATA OutputAC.XGFintra;
SET XGFintra;
FILE "&out_XGFintra." dlm='|' LRECL=32767 ;
PUT
tip_doc $1.
num_doc $11.
banco $4.
cod_cliente $8.
nombre $26.
cod_unid $1.
descrip_unid $8.
moned_orig $3.
moned_dest $3.
tip_certif $1.
nomb_auditor $60.
cod_usu $8.
fec_ingreso $10.
fec_mod $10.
statement_id $10.
archive_id $10.
tip_balance $1.
cod_modelo $4.
cod_mod_herr $4.
cod_analisis_herr $4.
escala_corta $5.
escala_larga $5.
qnu_puntuac $17.
fec_ejerc $10.
imp_vol_ventas $17.
fec_ejerc_matr $10.
imp_vol_matriz $17.;
run;
您可能想知道为什么我没有使用PROC导出步骤,我也使用了,但是PROC导出的问题是它删除了一些变量的空白,我使用数据步骤是为了避免这种情况发生,因为我必须有一些变量的左边或右边有空白。
有人有什么建议吗?
非常感谢。您在这里混淆了两种不同的输出,这导致了您的问题 一般来说,我们有“固定宽度”文件和“分隔”文件,但通常没有两个文件(固定宽度的字段,但也分隔)。我想你可以,如果你真的想的话,但这有点违背了定界符的意义 执行此操作时:
put var $15.;
它不会使用分隔符,因为只有在使用list
output时才会放置分隔符。这不是列表
——这是格式的
,并且假定输出为固定宽度
但是,您可以使用modified list
输出,请参见以下示例:
文件名f temp
data _null_;
set sashelp.class;
file f dlm='|';
put age :6.
name :$20.
;
run;
data _null_;
infile f;
input @;
put _infile_;
run;
data _null_;
set sashelp.class;
file f;
put age 6. '|'
name $20. '|'
;
run;
data _null_;
infile f;
input @;
put _infile_;
run;
但是,这并不能按您希望的方式保留空间。为此,您必须实际使用格式化输入并输入您自己的字符。
文件名f temp
data _null_;
set sashelp.class;
file f dlm='|';
put age :6.
name :$20.
;
run;
data _null_;
infile f;
input @;
put _infile_;
run;
data _null_;
set sashelp.class;
file f;
put age 6. '|'
name $20. '|'
;
run;
data _null_;
infile f;
input @;
put _infile_;
run;
您可以在中看到更多关于这一点和区别的信息。您需要使用列表模式让SAS插入分隔符。但要生成分隔文件,您应该在file语句中使用DSD选项。当您这样做时,SAS将确保分隔文件的格式正确,允许通过在包含分隔符的值周围添加引号来解析行。此外,它不会浪费任何字符来表示空值
DATA OutputAC.XGFintra;
SET XGFintra;
FILE "&out_XGFintra." dsd dlm='|' LRECL=32767 ;
PUT
tip_doc
num_doc
banco
cod_cliente
nombre
cod_unid
descrip_unid
moned_orig
moned_dest
tip_certif
nomb_auditor
cod_usu
fec_ingreso
fec_mod
statement_id
archive_id
tip_balance
cod_modelo
cod_mod_herr
cod_analisis_herr
escala_corta
escala_larga
qnu_puntuac
fec_ejerc
imp_vol_ventas
fec_ejerc_matr
imp_vol_matriz
;
run;
如果您使用PUT,它将只放置您指定的内容,而不是在此处指定分隔符。你能再定义一下你的需求吗?看起来你可能想探索一个固定宽度的文件?变量有固定的宽度,但文件可以有非固定的宽度,因为棍子会增加文件的宽度。当你说我没有指定分隔符时,我不太明白,你有没有一个例子可以用来指导我?。Muchas gracias。当您指定PUT时,它只按照编码准确地写入您告诉它的内容。在这种情况下,还需要将分隔符放入put语句中。有一些捷径方法,但我想它们都会占用空间。非常感谢你,你的建议对我帮助很大,谢谢!!!