问题:假设我不知道变量名和变量数。或者想象有太多的变量我无法写出put语句。
以下情况是我知道有3个变种
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
答案 0 :(得分:2)
你有这么多答案看起来有效,但有不同的角色的原因是重要的是将_all_
改为(_all_)
。之后的论点并不重要。
详细解释here,你写的时候实际上有两件完全不同的事情
put _all_;
和
put (_all_) (:);
熟悉重载函数概念的程序员会发现这是最简单的思考方式。如果put
看到_all_
,则会调用put
的一个版本。如果它看到(_all_)
(或其周围带有()的任何变量列表),则会调用另一个(将_all_
扩展到其变量列表)。请注意,如果您尝试
put (_all_);
它失败了,它失败了,错误表明它正在尝试调用格式化输入(即,它询问你为什么不在那里有另一个(
,这在格式化输入中是正常的在包含( )
的列表之后。)
_all_
本身就是argument to put
,专门告诉它使用named output输出数据集中的所有变量。因此输出的variable=value
格式。所以在第一个例子中,_all_
是一个常量 - 一个参数 - 仅此而已。
在第二个示例中,(_all_)
是variable list,其中包含所有变量,就像输入的那样,以空格分隔。所以
put (_all_) (:);
相当于
put (name sex age height weight) (:);
如果与SASHELP.CLASS
一起使用。添加任何东西 - 冒号,波浪号和符号等 - 在格式化输出的上下文中是合法的将导致使用它。
请注意
put _all_ @;
不会导致这种情况发生 - 显然@
(或@@
或/
或//
)都是put _all_
的合法论据。
有趣的是,_numeric_
和_character_
没有类似的捷径 - 显然这只是_all_
的明确,特殊情况。没有parens就不能使用它们。 put _numeric_;
给出错误_numeric_
不是合法变量名称。但是,put (_numeric_) (:);
完全合法。
答案 1 :(得分:1)
尝试使用冒号修饰符选项。
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删除所有前导和尾随空白,每个值后跟一个空白。字符变量的缺失值写为空白(“”),默认情况下,数字变量的缺失值写为句点(“。”)。
答案 2 :(得分:1)
This is right one
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (~);
run;
这个可以帮助你
答案 3 :(得分:0)
不,我' m 斯巴达克斯!
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (&);
run;
答案 4 :(得分:0)
最简单的方法是使用变量列表后跟格式列表。语法是:
(<variable list>) (<format list>)
重复格式列表中的值,直到变量列表中的变量用尽为止。格式列表可以包括格式修饰符,如:,&amp;,〜或=和光标移动命令,如/,+ n或@n。
此外,您应该将DSD选项添加到FILE语句中,以便在CSV文件中正确表示缺失值,因为分隔符之间没有任何内容。
所以你的程序简化为:
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' DSD dlm=',';
put (_all_) (:) ;
run;
你对PUT _ALL_的问题;当_ALL_本身使用时,它的处理方式与它在()中的变量列表的一部分时的处理方式不同。作为变量列表,它不包括系统生成的变量,如_N_或FIRST。或者最后。 BY语句生成的变量。
请注意,如果要在变量列表中使用_ALL_并仍然获得命名输出,则可以在格式列表中使用= format修饰符。
put (_all_) (=) ;
答案 5 :(得分:-1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" />
<script src="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.12.9/vue.min.js"></script>
<div id="el">
<p>Selected: {{selected[0].country}}</p>
<select v-select="selected[0].country" options="options">
<option value="0">default</option>
</select>
<p>Selected: {{selected[1].country}}</p>
<select v-select="selected[1].country" options="options">
<option value="0">default</option>
</select>
</div>