Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用palote字符作为分隔符在sas中创建.txt文件?_Sas - Fatal编程技术网

如何使用palote字符作为分隔符在sas中创建.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

我试图创建一个以分隔符“|”作为分隔符的.txt文件,我使用了一个数据步骤,在file语句中,我一直在尝试DLM参数和分隔符,但没有一个像我所希望的那样使用分隔符生成一个.txt文件。正在创建的.txt文件没有任何分隔符。这是我正在使用的代码:

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语句中。有一些捷径方法,但我想它们都会占用空间。非常感谢你,你的建议对我帮助很大,谢谢!!!