我有一个 SAS 数据集,必须导出到 .csv 文件。我有以下两个相互矛盾的要求。
我对上述问题的解决方案是转义分号或用逗号替换它。
我怎样才能以一种良好、干净和有效的方式使用例如tranwrd http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000215027.htm在整个数据集上?
我的尝试:
对于每个变量,使用tranwrd(.., ";", ",")
函数作用于数据集中的变量。更新数据集并循环所有变量。然而,这自然是一个very即使对于半大型数据集,这样做的效率也很低,因为我必须为每个变量执行一个数据步骤。它的代码相当难看,因为我必须通过几个步骤才能获取变量名称,但效率低下确实是最糟糕的。
data test;
input w $ c b d e $ f $;
datalines4;
Aaa;; 50 11 1 222 a;s
Bbb 35 12 2 250 qw
Comma, 75 13 3 foo zx
;;;;
run;
* Get the variable names;
proc contents data=test out=vars(keep=name type varnum) order=varnum noprint;
run;
* Sort by variable number;
proc sort data=vars;
by varnum;
run;
* Put variable names into a space-separated string;
proc sql noprint;
select compress(name)
into :name_list separated by ' '
from vars;
quit;
%let len = %sysfunc(countw(&name_list));
*Initialize loop dataset;
data a;
set test;
run;
%macro loop;
%do i = 1 %to &len;
%let j = %scan(&name_list,&i);
data a(rename=(v_&j = &j) drop=&j);
set a;
v_&j.=compress(tranwrd(&j,";",","));
run;
%end;
%mend;
%loop;
我想我可能对你的问题有更优雅的解决方案:
data class;
set sashelp.class;
array vars [*] _character_;
do i = 1 to dim(vars);
vars[i] = compress(tranwrd(vars[i],"a","X"));
end;
drop i;
run;
您可以使用array
引用数据集中的所有字符列,然后循环遍历它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)