在数据STEP文件语句导出逗号分隔的文本文件(file statement in data step

2019-10-24 15:51发布

问题:假设我不知道变量名和变量的数量。 或想有,我不能写看跌声明的变量太多。

下列情况下,我知道有3个varialbes

data _null_;
    set meeting;
    file 'C:\Users\Desktop\meeting2.txt' dlm=',';
    put region mtg sendmail;
run;

我试图用put _all_; 而输出是:

region=N mtg=24NOV1999 sendmail=10OCT1999 _ERROR_=0 _N_=1
region=S mtg=28DEC1999 sendmail=13NOV1999 _ERROR_=0 _N_=2
region=E mtg=03DEC1999 sendmail=19OCT1999 _ERROR_=0 _N_=3
region=W mtg=04OCT1999 sendmail=20AUG1999 _ERROR_=0 _N_=4

虽然它不给comman分隔的格式,但命名的格式,而不是

我所需的输出是

N,24NOV1999,10OCT1999
S,28DEC1999,13NOV1999
E,03DEC1999,19OCT1999
W,04OCT1999,20AUG1999

Answer 1:

 This is right one
    data _null_;
    set meeting;
    file 'C:\Users\Desktop\meeting2.txt' dlm=',';
    put (_all_) (~);
    run;

此人帮助ü



Answer 2:

你有一个似乎工作这么多的答案,但有不同的角色的原因,是最重要的事情正在发生变化_all_(_all_) 之后的参数并不重要。

仔细地说明了这里 ,你确实有去,当你写的完全是两回事

put _all_;

put (_all_) (:);

熟悉重载函数的概念,程序员会发现,当想到这一点最简单的方法。 如果put认为_all_ ,它调用的一个版本put 。 如果它看到(_all_)或(变量任何列表)周围),它调用另一个(扩大_all_其变量列表)。 请注意,如果你尝试

put (_all_);

它失败,失败与错误表明它正试图调用格式化的输入(即,它会询问你为什么你没有其他(有,与列表后这将是格式化输入很正常的事情( )


就其本身而言, _all_是要说法put那个专门告诉它使用命名的输出数据集中的输出所有变量。 因此, variable=value输出的格式。 因此,在第一个例子, _all_是一个常数-参数-仅此而已。


在第二示例中,虽然, (_all_)是变量列表 ,它包含所有的变量,就好像它们被键入的,空间限定。 所以

put (_all_) (:);

相当于

put (name sex age height weight) (:);

如果使用SASHELP.CLASS 。 添加任何东西 - 一个冒号,一个波浪线,一个符号,等等 - 这是格式化输出的情况下法律将导致使用。

注意

put _all_ @;

不会导致这样的事情发生-显然@ (或@@/// )都是法律论据来put _all_


有趣的是, _numeric__character_没有类似的快捷方式-显然,这是一个明确的,特殊情况下只是为了_all_ 。 他们不能没有括号使用。 put _numeric_; 给出了一个错误_numeric_不是合法的变量名。 但是, put (_numeric_) (:); 是完全合法的。



Answer 3:

尝试结肠修改选项。

data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (:);
run;

另一种选择是从SASHELP.VCOLUMN表中读取的名字,创建宏变量,其中列出了列,包括在你的PUT语句。

该文档是有点稀少: https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000176623.htm

:使您可以指定该PUT语句使用写变量值的格式。 所有前导和尾随空白将被删除,并且每个值后跟一个空格。

〜使您可以指定该PUT语句使用写变量值的格式。 SAS显示报价格式化的值,标志着即使格式化值不包含的分隔符。 SAS删除所有的前缘和后空白,并且每个值后跟一个空格。 字符变量的缺失值被写为空白(“‘),默认情况下,对于数值变量的缺失值书写句号(’。”)。



Answer 4:

不, 我是斯巴达克斯!

data _null_;
  set meeting;
  file 'C:\Users\Desktop\meeting2.txt' dlm=',';
  put (_all_) (&);
run;


Answer 5:

这是最简单的只使用一个变量列表后面的格式列表。 语法是:

(<variable list>) (<format list>)

重复格式列表中的值,直到变量列表中的变量已耗尽。 格式列表可以包括格式改性剂,如:,&〜或=和光标移动命令,如/,+ n或@n。

另外,应在DSD选项添加到您的文件语句,以便缺失值在CSV文件具有分隔符之间没有适当的代表。

所以,你的程序简化为:

data _null_;
  set meeting;
  file 'C:\Users\Desktop\meeting2.txt' DSD dlm=',';
  put (_all_) (:) ;
run;

你有没有和PUT _ALL_的问题; 是,当_ALL_使用它本身比当它的内部变量列表的一部分不同的处理()。 作为一个变量列表不包括系统生成的变量,例如_N_或FIRST。 或最后。 通过报表生成的变量。

需要注意的是,如果你想在一个变量列表中使用_ALL_,仍然获得命名的输出,您可以使用=格式修改的格式列表中。

put (_all_) (=) ;


Answer 6:

data meeting;

input region $ mtg $ sendmail $;

cards;

N 24NOV1999 10OCT1999

S 28DEC1999 13NOV1999

E 03DEC1999 19OCT1999

W 04OCT1999 20AUG1999

;
   run;


 proc export data=meeting
   outfile='c:\input\meeting.txt'
   dbms=tab replace;

   delimiter=',';

run;

hope this is helpul for even number of of variables.


文章来源: file statement in data step to export comma delimited text file
标签: sas