过程导出中的混合分隔符



有没有一种方法可以使观察中的第一个分隔符与其他分隔符不同?在 SQL Server Integration Services (SSIS( Microsoft中,有一个选项可以设置每列的分隔符。 我想知道在 SAS 中是否有类似的方法可以通过修改以下代码来实现这一点,其中第一个分隔符将改为制表符,其余为管道:

proc export
    dbms=csv
    data=mydata.dataset1
    outfile="E:OutPutFile_%sysfunc(putn("&sysdate9"d,yymmdd10.)).txt"
    replace
    label;
    delimiter='|';
run;

例如

从:

var1|var2|var3|var4

var1     var2|var3|var4

。其中 var1 和 var2 之间的大空间是一个制表符。

提前非常感谢。

听起来你只是想创建一个结合了前两个变量的新变量,然后使用制表符分隔符将其写出来。

data fix ;
  length new1 $50 ;
  set have ;
  new1=catx('09'x,var1,var2);
  drop var1 var2 ;
run;
proc export data=fix ... delimiter='|' ...

请注意,您可以在数据步骤中 FILE 语句的 DLM= 选项中引用变量。

data _null_;
  dlm='09'x ;
  file 'outfile.txt' dsd dlm=dlm ;
  set have ;
  put var1 @ ;
  dlm='|' ;
  put var2-var4 ;
run;

或者,您可以在data _null步骤中使用catx()技巧。您可能还希望使用vvalue()函数来确保应用格式。

data _null_;
  length newvar $200;
  file 'outfile.txt' dsd dlm='|' ;
  set have ;
  newvar = catx('09'x,vvalue(var1),vvalue(var2));
  put newvar var3-var4 ;
run;

更新了固定分隔符顺序以匹配问题。

基于Tom标记答案的最终代码:

data _null_;
  dlm='09'x ;
  file "E:outputfile_%sysfunc(putn("&sysdate9"d,yymmdd10.)).txt" dsd dlm=dlm ;
  set work.have;
  put 
  var1  @ ;
  dlm='|';
  put   var2 var3 var4;
run;

最新更新