2016-12-01 21 views
-1

ScatterplotSAS配列はマクロ

以内に私は、私はすべてのプロットの組み合わせをキャッチできるように、ループの中で、私が作成した散布図のテンプレートを使用しようが、私は配列のためsymputXを呼び出して使用することはできませんがわかります。そのような場合にどのように処理を見つけることができますか?

上記の散布図の例は、1つの組み合わせに対してのみ見つかります。あなたはあなただけの区切り文字列を使用する必要がありますマクロ変数の値のリストを保存したい場合は

は通常あなたに

data work.mycsv; 
    set work.mycsv; 
    array temp[3] x y z; 
    call symputX('temp',temp); 
    run; 
    %macro scatter(); 
    %let i = 1; 
    %do %while (&i <= 3); 
    %let j = %sysevalf(&i+1); 
    %do %while(&j <= 3); 
    %if &i ne &j %then %do; 
     proc template; 
     define statgraph scatterplot; 
      begingraph; 
       entrytitle "Title"; 
        layout overlay;  
         scatterplot x=&&temp[&i.] y=&&temp[&j.]/
         group=Survived name="scatter" datalabel=Response; 
         discretelegend "scatter"; 
        endlayout; 
      endgraph; 
     end; 
    %end; 
%let j =%sysevalf(&j + 1); 
%end; 
%let i = %sysevalf(&i + 1); 
%end; 
%mend scatter; 
%scatter(); 
proc sgrender data=work.mycsv template=scatterplot; 
run; 
+1

マクロ配列の概念はありません。類推はリストであり、順番に各項目にアクセスします。ここの例を参照してください。http://support.sas.com/documentation/cdl/en/mcrolref/69726/HTML/default/viewer.htm#p1n2i0ewaj1zian1ria5579z1zjh.htm – Reeza

+0

マクロ変数TEMPには何を格納しますか?ソース表MYCSVにはいくつの観測値がありますか? MYCSVの簡単な例と生成するSCATTERPLOTステートメントを投稿してください。 – Tom

+0

こんにちはTom、scatterplotの例を1つの組み合わせに追加しました。すべての組み合わせに対して同じ(この場合は3つの組み合わせ)を生成します。私は3つの数値パラメータと900の観測値を持っています。回答 –

答えて

1

ありがとうございます。リストが変数名である場合、区切り文字としてスペースを使用するのが最も簡単です。

%let varlist= X Y Z ; 

その後、あなたは簡単にすべての双方向の組み合わせを見つけるために、マクロのロジックを構築することができます。

%let nitems=%sysfunc(countw(&varlist)); 
%do i=1 %to %eval(&nitems-1); 
    %let var1=%scan(&varlist,&i); 
    %do j=%eval(&i+1) %to &nitems ; 
    %let var2=%scan(&varlist,&j); 
    .... 
    %end; 
%end; 
0
%macro scatter(); 
%let varlist = x y z; 
%let i = 1; 
%do %while (&i <= 3); 
%let j = %sysevalf(&i+1); 
%do %while(&j <= 3); 
%if &i ne &j %then %do; 
    %let x_used=%qscan(%bquote(&varlist),&i); 
    %let y_used=%qscan(%bquote(&varlist),&j); 
    proc template; 
     define statgraph scatterplot; 
      begingraph; 
       entrytitle "&x_used and &y_used by Response"; 
        layout overlay;  
         scatterplot x=&x_used y=&y_used/
         group=Survived name="scatter" datalabel=Response; 
         discretelegend "scatter"; 
        endlayout; 
      endgraph; 
      end; 
      proc sgrender data=work.mycsv template=scatterplot; 
    run; 
    %end; 
%let j =%sysevalf(&j + 1); 
%end; 
%let i = %sysevalf(&i + 1); 
%end; 
%mend scatter; 
%scatter();