我有sas数据集,并尝试导出到csv。它包含大约5000列,每列都需要导出。但是,当我导出数据时,将包括所有行,但仅包括前2000个列名。有人知道如何在此处包括所有列名称吗?我检查了一些有关Lrecl的信息可能会有所帮助,但我不知道如何将其应用于列名。
答案 0 :(得分:1)
无需使用PROC EXPORT写入分隔文件。要写入数据,您可以使用简单的数据步骤。
data _null_;
set mydata ;
file "myfile" dsd ;
put (_all_) (+0);
run;
要包含标题行,您需要做更多的工作。
首先获取变量列表,然后使用它来写标题行。
proc transpose data=mydata(obs=0) out=names;
var _all_;
run;
data _null_;
file "myfile" dsd ;
set names;
put _name_ @ ;
run;
然后,您可以在附加实际数据的步骤中使用FILE语句的MOD选项。
data _null_;
set mydata ;
file "myfile" dsd mod;
put (_all_) (+0);
run;
确保设置记录长度足够长,以容纳所有变量名。默认记录长度为32,767字节,将只为平均变量名留出足够的空间以使其为5个字符,并且仍可容纳5,000个名称。将lrecl=500000
选项添加到FILE
语句中。只要值不超过操作系统上的SAS所允许的值,就不会有太大问题。通常,上限大约为1到1000万个字符。
答案 1 :(得分:0)
使用具有较大EXPORT
的fileref指定FILE=
LRECL=
。导出将根据LRECL
设置剪切一行(一行的最大字符数)。
示例:
data have;
do row = 1 to 10;
array my_column_name (5000) (1230001:1235000); * initialize the array with some large integers;
output;
end;
run;
* fileref for export. lines output will 'clip' output at 1,000,000 characters;
filename widefile 'c:\temp\my_wide_data.csv' lrecl=1000000;
proc export data=have dbms=csv replace file=widefile;
run;
filename widefile; * clear the fileref;
导出向导使用系统选项LRECL,并且系统LRECL设置不能超过32767(LRECL的SAS默认设置是32767)。这就是导出向导输出被裁剪的原因。