1

別の質問です。出力を生成する複数のデータセットがあり、これらを 1 つの Excel ワークシートに出力し、独自の書式設定を適用する方法があります。たとえば、データセット1、データセット2、データセット3があります

each data set has two coloumns, for example
Col 1 Col 2
1    2 
3    4 
5    6

各データセットを 1 つのワークシートに入れ、列で区切られるようにしたいので、Excel では次のようになります。

Col 1 Col 2 Blank Col Col 1 Col 2 Blank Col

これは本当なので、DDEを調べる必要があると誰かが私に言った

よろしく、

4

3 に答える 3

1

DDEを使えば間違いなくできます。DDE が行うことは、Excel のメニュー、ボタン、セルなどでのユーザーのクリックをシミュレートするだけです。これは、名前が have1、have2、および have3 の 3 つのデータセットのマクロ ループでそれを実行する方法の例です。より一般的な解決策 (未知の数のデータセット、さまざまな数の変数、ランダムなデータセットの名前など) が必要な場合は、コードを更新する必要がありますが、その 'DDE 部分' は基本的に同じです。もう 1 つの前提として、コードの実行中に Excel ブックが開かれている必要があります。自動化することもできますが、DDE 自体を使用して Excel を起動し、ファイルを開くことができます。ここでDDE の非常に優れた紹介を見つけることができます。ここでは、これらすべてのトリックが詳細に説明されています。

data have1;
    input Col1 Col2;
datalines;
1 2
3 4
5 6
;
run;
data have2;
    input Col1 Col2;
datalines;
1 2
3 4
5 6
7 8
;
run;
data have3;
    input Col1 Col2;
datalines;
1 2
3 4
7 8
5 6
9 10
;
run;



%macro xlsout;

/*iterating through your datasets*/
%do i=1 %to 3;

    /*determine number of records in the current dataset*/
    proc sql noprint;
        select  count(*) into :noobs
        from have&i;
    quit;

    /*assign a range on the workbook spreadsheet matching to data in the current dataset*/
    filename range dde "excel|[myworkbook.xls]sas!r1c%eval((&i-1)*3+1):r%left(&noobs)c%eval((&i-1)*3+2)" notab;

    /*put data into selected range*/
    data _null_;
        set have&i;
        file range;
        put Col1 '09'x Col2;
    run;
%end;

%mend xlsout;
%xlsout
于 2014-01-09T04:43:27.377 に答える