Proc Export中的混合分隔符

时间:2018-03-19 14:45:23

标签: sas

是否有方法使观察中的第一个分隔符与其余分隔符不同?在Microsoft SQL Server Integration Services(SSIS)中,可以选择为每列设置分隔符。我想知道是否有类似的方法在SAS中实现这一点,修改了下面的代码,其中第一个分隔符将是tab而不是其余的管道:

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之间的大空间是一个标签。

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

或者您可以在catx()步骤中使用data _null技巧。您还可能希望使用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;

已更新修正了与问题匹配的分隔符顺序。

答案 1 :(得分:0)

最终代码基于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;