新来的,所以很抱歉。 我有一个 SAS 文件,需要将其导出为 CSV,并且需要向所有字段添加双引号。 我怎样才能做到这一点? 预先感谢。
从 SAS 创建 CSV 文件的方法有很多。 使用
proc export
不会将每个字段都用双引号括起来,因此最简单的方法是 %ds2csv()
宏。 这假设您有 SAS 9.2 或更高版本。 可以在这里找到它的文档:
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002683390.htm
运行示例:
%ds2csv(data=sashelp.retail, runmode=b, csvfile=c:\class.csv);
产品:
"Retail sales in millions of $","DATE","YEAR","MONTH","DAY"
"$220","80Q1","1980","1","1"
"$257","80Q2","1980","4","1"
"$258","80Q3","1980","7","1"
这是另一个使用数据的步骤
data _null_;
file 'data_want.csv' dsd dlm = ',';
set data_have;
if _n_ = 1 then put @1 "variables name to input"; /* Add variable names */
put (_all_) (~);
run;
这是一种在包含标题的情况下获得相同结果的方法
proc contents data=sashelp.class out=vars(keep=name varnum);run;
proc sql noprint;
select quote(strip(name)) into :vars separated by '|' from vars
order by varnum;
quit;
data _null_;
file 'test.txt' dsd dlm='|';
set sashelp.class;
if _n_ = 1 then put %sysfunc(quote(&vars.));
put (_all_) (~);
run;
我知道这是一个老问题,但我的 2 便士......
下面的宏不引用格式化为字符值的数值,但它很容易实现。
%macro csvQuoteChars(lib=,dset=,outPath=);
proc contents data=&lib..&dset out=c(keep=name type) noprint;
run;
%let dsid = %sysfunc(open(c));
%let nobs = %sysfunc(attrn(&dsid,nlobs));
data _null_;
set &lib..&dset;
file "&outPath\&lib..&dset..csv" dsd;
%do i=1 %to &nobs;
%let rc = %sysfunc(fetchobs(&dsid,&i));
%let vName = %sysfunc(getvarc(&dsid,1));
%let vType = %sysfunc(getvarn(&dsid,2));
%put &=vName &=vType;
%if &vType = 2 %then %do;
put (&vName) (~) @;
%end;
%else %if &vType = 1 %then %do;
put &vName @;
%end;
%if &i = &nobs %then %do;
put;
%end;
%end;
run;
%let dsid = %sysfunc(close(&dsid));
%mend csvQuoteChars;
%csvQuoteChars(lib=sashelp,dset=class,outPath=d:\temp);
你能解释一下这一行吗 put (&vName) (~) @; 看不懂语法
如何获取带有列名称的标题行,也带有双引号
最后,我必须进行导出,其中每个缺失值都应写为“NA”
可以吗?