1

2 つの予測因子を含むロジスティック モデルを構築したいと考えています。セット all_indeps1 から 1 つと all_indeps2 から 1 つ。以下のマクロを実行しますが、all_indeps1 の最初の変数と all_indeps2 のすべての変数を使用してモデルのみを実行します。2 つのセットから 2 つの変数のすべての可能な組み合わせを取得できるようにするには、マクロをどのように修正すればよいですか?

また、ロジスティック モデルから各予測子の p 値のみを出力したいと思いますが、何かアイデアはありますか?

どうもありがとう!

%macro trivariate(all_indeps1, all_indeps2);
%let k = 1;
%let l = 1;
%let indep1 = %scan(&all_indeps1, &k);
%let indep2 = %scan(&all_indeps2, &l);

    %do %while("&indep1" NE "");
        %do %while ("&indep2" NE "");
    title "independent variable is &Indep1 and &Indep2";
    proc logistic data = A descending;
        model Y = &indep1 &indep2;
    run;
        %let l = %eval(&l + 1);
        %let indep2 = %scan(&all_indeps2, &l);
        %end;
    %let k = %eval(&k + 1);
    %let indep1 = %scan(&all_indeps1, &k );

    %end;

%繕う;

4

2 に答える 2

1

これは本当に2つの質問です。

1.あなたのマクロが間違っているとは思いません。options mprint mlogic;舞台裏で何が起こっているかをもっと見るようにしてください。

私は個人的にこれを次のようにコーディングします

%macro trivariate(all_indeps1, all_indeps2);
%let n1 = %sysfunc(countw(&all_indeps1));
%let n2 = %sysfunc(countw(&all_indeps2));
%do i=1 to &n1;
   %let indep1 = %scan(&all_indeps1,&i);
   %do j=1 %to &n2;
      %let indep2 = %scan(&all_indeps2,&i);

      STUFF
   %end
%end;
%mend;

2. PROC から 1 つの出力のみを選択する。ods trace on;手順を使用するとods trace off; 、出力先に配置されたテーブル名が出力されます。

ods select <list of table names>;次に、手順を使用できます。ods select default; これにより、Output Delivery System (ODS) に、要求したテーブルのみを印刷してから、デフォルトの出力にリセットするように指示されます。(このテーブルはおそらく ParameterEstimates です)

于 2013-10-03T02:22:40.183 に答える
1

これをマクロループとしてコーディングすることはまったくありませんが、代わりに、マクロが単なる内側のビットになるように設定し、マクロを n1*n2 回呼び出します。

2 つのデータセット と がindep1ありindep2、それぞれに行ごとに 1 つの変数名を持つ 1 つの列が含まれているとします。次に、マクロがある場合:

%macro trivariate(indep1,indep2);
   title "independent variable is &Indep1 and &Indep2";
    proc logistic data = A descending;
        model Y = &indep1 &indep2;
    run;
%mend trivariate;

proc sql;
 select cats('%trivariate(',indep1.var,',',indep2.var,')') into :trivarlist
  separated by ' ' 
  from indep1, indep2;
quit;

&trivarlist.;

非常に単純な場合を除いて、マクロ言語の内部よりも外部で繰り返しを制御する方がほとんどの場合簡単です。また、コードの移植性と再利用性が向上するため、より優れたプログラミング スタイルです。

于 2013-10-03T03:37:51.330 に答える