0

100,000 行 * 100,000 列の sas データセットを Excel ファイルに出力する必要があります。proc export または ODS html ステートメントが壊れているため、同じものを印刷できません。

ファイルステートメント内のデータは、同じものを印刷できます。しかし、論理レコード長の制限により、印刷が適切ではなく、基本的に 1 行が 3 行に分割されています。抜け道はありますか、それともデータ処理に関する SAS の制限ですか?

4

2 に答える 2

6

SAS の制限ではなく、バージョンに応じて最大 16384 列と最大 100 万行を処理できる Excel の制限です。Excel は、この規模のデータセットを処理するためのものではありません。適切なデータベースを使用してください。

于 2013-06-25T09:20:49.987 に答える
3

これをどのシステムでも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 値はオペレーティング システムによって異なりますが、ほとんどの場合、100 万または 2 を処理できると思います。確かにWin7はできます。PROC EXPORT を csv に使用することもできますが、ログから (300k 行の) コードを取得し、デフォルトで 32767 に設定されているため、LRECL をより大きく変更する必要があります。変更できないと思います。プロセスで。

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 が明らかに十分に長い場合でも、バッファ オーバーフローが発生します。

于 2013-06-25T13:53:10.707 に答える