问题:假设我不知道变量名和变量的数量。 或想有,我不能写看跌声明的变量太多。
下列情况下,我知道有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
This is right one
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (~);
run;
此人帮助ü
你有一个似乎工作这么多的答案,但有不同的角色的原因,是最重要的事情正在发生变化_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_) (:);
是完全合法的。
尝试结肠修改选项。
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删除所有的前缘和后空白,并且每个值后跟一个空格。 字符变量的缺失值被写为空白(“‘),默认情况下,对于数值变量的缺失值书写句号(’。”)。
不, 我是斯巴达克斯!
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (&);
run;
这是最简单的只使用一个变量列表后面的格式列表。 语法是:
(<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_) (=) ;
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.