1

私は2万列に近いデータベースを持っています...これはSASの転置手順の出力です。

SAStranspose の出力を複数の csv ファイルに分割することはできますか? 同様に、3000 列 (#rows を同じに保つ) を 5 つの CSVfiles にプッシュできますか?.. SAS マクロでこれを行うにはどうすればよいですか?.

基本的に、顧客ごとに 20,000 の値を持つ変数があります。その変数が列にあるファイルを作成する必要があります。元のデータは次のようなものです。

CustID 変数値 1 4 0 1 3 23 1 1 22 1 2 18 2 4 0 2 3 23 2 1 22 2 2 18

したがって、転置後は次のようになります。 CustID Var1 Var2 Var 3 Var4 1 22 18 23 0
2 22 18 23 0

しかし、問題は、上記の「変数」に20Kの値があるため、転置するとVar1からVar20000になる..Excelに収まらない..

この問題を処理する他の方法はありますか?

Excelは16K列の容量があると思うので、このように処理したい..この状況をどのように処理できるか教えてください

4

2 に答える 2

2

これは悪い考えだと思いますが、別の可能な解決策があります。

data big;
   cust_id = 1;
   retain var1-var20000 0;
run;

data temp/view=temp;
  set big(keep=cust_id var1-var10000);
run;

proc export data=temp
   outfile='c:\temp\file1.csv'
   dbms=csv
   replace;
run;

data temp/view=temp;
  set big(keep=cust_id var10001-var20000);
run;

proc export data=temp
   outfile='c:\temp\file2.csv'
   dbms=csv
   replace;
run;

書き込まれた変数を制御するには、必要に応じてビュー定義を変更するだけです。最初に 5 つの CSV を作成することについて尋ねましたが、これにより 2 つ作成されます。

PROC EXPORTは KEEP または DROP データ セット オプションを尊重しないため、ビューを使用する必要があります。マクロを使用してこのようなことを行うことは、自分が何をしているのかをよく知っていて、さまざまなシナリオで複数回実行する必要がある場合を除き、良い考えではないと思います。

于 2013-10-04T16:36:50.473 に答える
1

「うわー、これは悪い考えだ」から始めます。

そうしなければならない場合は、keep ステートメントを記述したり、コードを出力したりすることも非常に簡単です。

proc contents data=sashelp.class out=names(keep=varnum name) noprint;
run;
proc sql noprint;
select name into :keeplist separated by ' ' from names where varnum le 2;
quit;
data forexport/view=forexport;
set sashelp.class;
keep &keeplist;
run;
proc export data=forexport outfile="c:\temp\whatever.csv" dbms=csv replace;
run;

残念ながら、少なくとも 9.4 の直接キープリストを使用したエクスポートには、改行を削除する奇妙なバグがあるため、ビューが必要です。

その後、proc sql から export へのビットをマクロ化して、異なる le/ge の組み合わせで実行できます。すべてのファイルにマッチキーを含めるようにしてください。

于 2013-10-04T15:33:15.650 に答える