Sas 数据步骤中的file语句以导出逗号分隔的文本文件
问题:假设我不知道变量名和变量数。或者想象有太多变量我无法编写put语句。 下面的例子是我知道有3个变量Sas 数据步骤中的file语句以导出逗号分隔的文本文件,sas,Sas,问题:假设我不知道变量名和变量数。或者想象有太多变量我无法编写put语句。 下面的例子是我知道有3个变量 data _null_; set meeting; file 'C:\Users\Desktop\meeting2.txt' dlm=','; put region mtg sendmail; run; 我试着使用put\u all 输出为: region=N mtg=24NOV1999 sendmail=10OCT1999 _ERROR_=0 _N_=1 regi
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put region mtg sendmail;
run;
我试着使用put\u 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
虽然它不提供分隔格式,但提供命名格式
我期望的输出是
N,24NOV1999,10OCT1999
S,28DEC1999,13NOV1999
E,03DEC1999,19OCT1999
W,04OCT1999,20AUG1999
尝试冒号修改器选项
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (:);
run;
另一个选项是从SASHELP.VCOLUMN表中读取名称,创建一个列出列的宏变量,并将其包含在put语句中
文档有点稀少:
:
允许您指定PUT语句用于写入变量值的格式。删除所有前导空格和尾随空格,每个值后面跟着一个空格
~
允许您指定PUT语句用于写入变量值的格式。SAS以引号形式显示格式化值,即使格式化值不包含分隔符。SAS删除所有前导空格和尾随空格,每个值后面都有一个空格。字符变量的缺失值写为空白(“”),默认情况下,数字变量的缺失值写为句点(“”)
这个能帮你不,我是斯巴达克斯
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' dlm=',';
put (_all_) (&);
run;
你有这么多看似有效但却有不同特点的答案,原因是重要的是将\u all
更改为(\u all)
。之后的争论并不重要
详细解释一下,当你写作的时候,你实际上有两件完全不同的事情
put _all_;
及
熟悉重载函数概念的程序员会发现这是最简单的方法。如果put
看到\u all
,它将调用put
的一个版本。如果它看到(\u all)
(或周围有()的任何变量列表),它将调用另一个(将\u all
扩展到其变量列表)。注意,如果您尝试
put (_all_);
它失败了,并且失败了,错误提示它正在尝试调用格式化输入(即,它询问您为什么没有另一个(
,这是格式化输入中在使用()
列表之后的正常情况)
就其本身而言,\u all
是一个专门告诉它用于输出数据集中的所有变量的函数。因此,输出的变量=值
格式。因此在第一个示例中,\u all
是一个常量-一个参数-仅此而已
但是,在第二个示例中,(\u all)
是一个空格分隔的变量,它包含所有变量,就好像它们是键入的一样
put (_all_) (:);
相当于
put (name sex age height weight) (:);
如果与SASHELP.CLASS
一起使用,添加在格式化输出上下文中合法的任何内容(冒号、波浪号、符号等)都将导致使用它
注意
put _all_ @;
不会导致这种情况发生-显然
(或@
或/
或/
)都是的法律论据
有趣的是,\u numeric\u
和\u character\u
没有类似的快捷方式-很明显,这是一个明确的特例,只适用于\u all\u
。没有参数就不能使用它们。put\u numeric\u;
给出了一个错误,\u numeric\u
不是一个合法的变量名。但是,put(\u numeric\u)(:);
是完全合法的。最简单的方法是使用变量列表,后跟格式列表。语法为:
(<variable list>) (<format list>)
PUT _ALL_uu;的问题是,当它自己使用时,它的处理方式与作为()内部变量列表的一部分时不同。作为变量列表,它不包括系统生成的变量,如_N_u或由by语句生成的FIRST.或LAST.变量
请注意,如果要在变量列表中使用_ALL uu,并且仍然获得命名输出,则可以在格式列表中使用=format修饰符
put (_all_) (=) ;
是否可以在数据步骤中而不是在proc export中执行?是否有关于使用“:”的文档in put语句?冒号将其转换为修改的列表输入
,这是有很好的文档记录的。当然,除了转换之外,它在这里并没有做任何事情-通常它允许您添加格式。然而,它在这里并没有实际修改的列表,是吗?它已经格式化了输出…所以它只是在某种程度上不做其他事情而不是用空括号防止SAS出错。是否有关于“~”用法的文档输入语句?这不是一个好的答案。虽然代码回答了问题,但除了代码之外,还应该对它的工作原理进行一些解释。P.S.如果有人能找到任何有关&
用法的文档,请将其作为答案发布,该答案已经开放了一段时间。您是否曾在SAS-L或社区上发布过?我不会如果数据为空或其他人知道答案,我会感到惊讶。
put _all_ @;
(<variable list>) (<format list>)
data _null_;
set meeting;
file 'C:\Users\Desktop\meeting2.txt' DSD dlm=',';
put (_all_) (:) ;
run;
put (_all_) (=) ;