【问题标题】:Print sas datatset having 100,000 columns in to excel file将具有 100,000 列的 sas 数据集打印到 excel 文件中
【发布时间】:2013-06-25 22:17:05
【问题描述】:

我需要将具有 100,000 行 * 100,000 列的 sas 数据集打印到 excel 文件中。 Proc 导出或 ODS html 语句中断,因此无法打印。

文件语句中的数据可以打印出来。但是,由于它们的逻辑记录长度限制,打印不正确,基本上我的一行被分解为 3 行。 是否有出路或者这是 SAS 在数据处理方面的限制?

【问题讨论】:

  • 一旦这个庞大的数据集在 excel 中,你将如何处理它?!
  • 但即使是制表符或逗号分隔的文本文件也是如此......据我所知,文本文件不应该有任何此类限制
  • 我需要测试我的矩阵分解逻辑............
  • 我的问题陈述可以访问:[link]stackoverflow.com/questions/17277434/…
  • 我查看了上面链接中的问题描述 - 我很确定您以错误的方式解决这个问题。您需要看一下稀疏矩阵表示 - 即使您不输入密集矩阵(我怀疑您正在尝试使用 100000*100000 矩阵),也有很多算法可以正常工作。跨度>

标签: sas


【解决方案1】:

与其说是 SAS 的限制,不如说是 Excel 的限制,它可以处理多达 16384 列和多达约 100 万行,具体取决于版本。 Excel 并不打算处理这种规模的数据集。使用适当的数据库。

【讨论】:

    【解决方案2】:

    你当然不能在任何系统中把它变成 excel。

    您应该能够将其转换为另一种格式,例如文本文件。例如:

    data mydata;
    array vars[100000];
    do _n_=1 to 10;
     do _t = 1 to dim(vars);
      vars[_t]=_t;
     end;
     output;
    end;
    drop _t;
    run;
    
    data _null_;
    file "c:\temp\myfile.csv" dlm=',' lrecl=2000000;
    set mydata;
    put _all_;
    run;
    

    *put all 对此并不能正常工作,但由于我不知道您的变量名称或设置,我无法真正为您提供更好的解决方案;您很可能可以使用快捷方式来定义 put 语句。;

    最大 LRECL 值取决于您的操作系统,但我认为它们中的大多数可以处理一两百万。 Win7当然可以。您也可以将 PROC EXPORT 用于 csv,但您必须从日志中获取(300k 行)代码并将 LRECL 修改为更大,因为它默认为 32767,我认为您无法修改它在过程中。

    SAS/IML 还允许另一种选择。我不确定您是否真的可以在任何合理的系统上执行 100k*100k(如果是数字 8 字节矩阵元素,则需要存储 800 亿字节......)

    proc iml;
    x=j(1e5,1e5,12345);
    
    filename out ’c:\temp\myfile.csv’;
    file out lrecl=800000;
    do i=1 to nrow(x);
      do j=1 to ncol(x);
       put (x[i,j]) 5.0 +5 ',' @;
      end;
    put;
    end;
    closefile out;
    quit;
    

    编辑:IML 中的 lrecl 语句似乎不太正常,否则我在这里做错了 - 但这可能是我的系统的错误。即使 lrecl 显然足够长,我也会遇到缓冲区溢出。

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2013-03-03
      相关资源
      最近更新 更多