2016-05-27 95 views
0

米国での状態変化に関するデータがあります。今、状態修正効果を制御するために多くのダミーを作成したいと考えています。スタータでは簡単な作業ですが、手作業ですべてのダミーを作成しなければならないようですが、修正効果を伴うロジット回帰はかなり遅くなります。あまりにも多くのchar変数をダミーとして作成する必要があるので、sasでchar変数(数値ではなく、私が適用するいくつかのメソッドを知っている)からダミーを作成するより効率的な方法があるのだろうかと思います。 乾杯、 EvaSASでカテゴリ変数を使用してダミーをより効率的に作成

+0

どのPROCを使用していますか? CLASSステートメントを使用しましたか? – Tom

答えて

0

proc logisticclassをサポートしています。変数をclassステートメントに置き、必要なパラメーター化のタイプを指定することもできます。最も一般的な方法は、参照コーディングです。

proc logistic data=sashelp.heart; 
    class sex bp_status/param=ref; 
    model status = sex ageAtStart height weight bp_status; 
run; 

https://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_logistic_sect006.htm

すべてのprocsのは、あなたがあなたのダミー変数を作成するproc glmmodまたは他の方法の様々なを使用することができ、それらの例には、class文をサポートするわけではありません。

http://blogs.sas.com/content/iml/2016/02/22/create-dummy-variables-in-sas.html

+0

小さな修正:REFは引用符なしで使用する必要があります – vasja

0

あなたは絶対に手動でこのようなマクロを使用することができますダミー変数を作成する必要がある場合。変数ごとに呼び出す必要があります。

%macro create_dummy(dataset=, var=); 

    %* Save Distinct Values and Dummy Variable Names; 

    proc sql noprint; 
    select distinct 
     &var, 
     tranwrd(tranwrd(trim(&var), " ", "_"), ".", "") 
    into 
     :value1-, 
     :name1- 
    from 
     &dataset 
    ; 

    select 
     count(distinct(&var)) 
    into 
     :total 
    from 
     &dataset 
    ; 
    quit; 

    %* Create Dummy Variables; 

    data &dataset; 
    set &dataset; 

    %do i=1 %to &total; 
     if &var = "&&value&i" then &&name&i = 1; else &&name&i = 0; 
    %end; 
    run; 
%mend create_dummy; 

マクロを1回だけ呼び出す場合は、マクロにループを追加できます。上部にdoループを追加してください:

%macro create_dummy(dataset=, var=); 
    %do l %to %sysfunc(countw(&var)); 
    %let var1 = %scan(&var, &l); 

    %* Save Distinct Values and Dummy Variable Names; 

    proc sql noprint; 
     select distinct 
     &var1, 
     tranwrd(tranwrd(trim(&var1), " ", "_"), ".", "") 
     into 
     :value1-, 
     :name1- 
     from 
     &dataset 
     ; 

     select 
     count(distinct(&var1)) 
     into 
     :total 
     from 
     &dataset 
     ; 
    quit; 

    %* Create Dummy Variables; 

    data &dataset; 
     set &dataset; 

     %do i=1 %to &total; 
     if &var1 = "&&value&i" then &&name&i = 1; else &&name&i = 0; 
     %end; 
    run; 
    %end; 
%mend create_dummy; 
関連する問題