0

この件に関する多くの論文をグーグル検索しましたが、欲しいものが見つからないようです。私は SAS マクロの初心者で、ここで助けを得たいと思っています。ここに私が欲しいものがあります:

1200 個の変数を持つデータセットがあります。これらの 1199 個の変数を OUTCOME として実行し、ロジスティック回帰の P 値をデータセットに保存するマクロが必要です。また、従属変数「性別」は性格であり、結果変数もそうです。しかし、クラスステートメントをマクロに入れる方法がわかりません。これを単一の手順として実行する方法の例を次に示します。

 proc logistic data=Baseline_gender ;
 class gender(ref="Male") / param=ref;
 model N284(event='1')=gender ; 
 ods output ParameterEstimates=ok;
 run;

私のアイデアは、ODS 出力を作成し、P 値以外の不要な変数を削除し、モデルの OUTCOME 変数名に従ってそれらを 1 つのデータセットにマージすることでした。

 Variable P-value
 A1       0.005
 A2       0.018
 ..       ....

いくつかのprocマクロで遊んでみましたが、うまくいきません!!! これについて本当に助けが必要です、どうもありがとう。

4

3 に答える 3

0

SRSwift は何かに気づいているかもしれませんが (彼の方法については十分にわかっていません)、マクロを使用してそれを行う方法を次に示します。

まず、データセット内の変数の数を数えます。これを行うには、テーブルからテーブルを選択しますdictionary.columns。これは、変数の数を に入れます&sqlobs。変数名をディクショナリ テーブルからマクロ変数に読み込みますvar1-var&sqlobs

%macro logitall;
proc sql;
create table count as
select name from dictionary.columns
where upcase(libname) = 'WORK'
  and upcase(memname) = 'BASELINE_GENDER'
  and upcase(name) ne 'GENDER'
;

select name into :var1 - :var&sqlobs
from dictionary.columns
where upcase(libname) = 'WORK'
  and upcase(memname) = 'BASELINE_GENDER'
  and upcase(name) ne 'GENDER'
;
quit;

次に、各従属変数に対して proc logistic を実行し、従属変数にちなんで名付けられたデータセットを毎回出力します。

%do I = 1 %to &sqlobs;
  proc logistic data=Baseline_gender ;
    class gender(ref="Male") / param=ref;
    model &&var&I.(event='1')=gender ; 
    ods output ParameterEstimates=&&var&I.;
  run;
%end;

次に、すべての出力データセットをまとめてindsname=、set ステートメントで使用するデータセット名で新しい変数を作成します。

data allvars;
  format indsname dsname varname $25.; 
  set
  %do I = 1 %to &sqlobs;
    &&var&I.
  %end;
  indsname=dsname;
  varname=dsname;
  keep varname ProbChiSq;
  where variable ne 'Intercept';
run;
%mend logitall;

%logitall;
于 2015-02-20T00:13:21.907 に答える
0

マクロを使用してそれを行う別の方法を次に示します。最初にグローバル変数で結果として使用されるすべての変数を定義してから、マクロ スクリプトを記述します。

%let var = var1 var2 var3 ..... var1199;

%macro log_regression;
  %do i=1 %to %eval(%sysfunc(countc(&var., " "))+1);
    %let outcome_var = %scan(&var, &i);
    %put &outcome_var.;

    proc logistic data = baseline_gender desc;
    class gender (ref = "Male") / param = ref;
    model &outcome_var. = gender;
    ods output ParameterEstimates = ParEst_&outcome_var.;
    run;

    %if %sysfunc(exist(univar_result)) %then %do;
      data univar_result;
      set univar_result ParEst_&outcome_var.;
      run;
    %end;
    %else %do;
      data univar_result;
      set ParEst_&outcome_var.;
      run;
    %end;

  %end;
%mend;
于 2016-01-13T18:29:53.760 に答える