列名并非全部导出

时间:2019-11-13 20:33:45

标签: sas

我有sas数据集,并尝试导出到csv。它包含大约5000列,每列都需要导出。但是,当我导出数据时,将包括所有行,但仅包括前2000个列名。有人知道如何在此处包括所有列名称吗?我检查了一些有关Lrecl的信息可能会有所帮助,但我不知道如何将其应用于列名。

2 个答案:

答案 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)。这就是导出向导输出被裁剪的原因。