2016-03-29 28 views
0

以下のSASコードを記述して、すべてのカテゴリ変数のダミー変数を作成しました。しかし、コードは私に望みの結果を与えてくれません。データセットsas内のカテゴリ変数のダミー変数を作成するためのマクロの作成

作業ライブラリ#に設定されたデータのコピーを作成する

/#/データ内の変数の名前と型を取得

/#が設定

libname eco "Z:\Globe\Call Data Modeling"; 
    data model_data; 
    set eco.em_save_train; 
    run; 

proc contents data= model_data out= var_names(keep=name type)noprint; 
    run; 

/#を作成マクロを使用してダミー変数を作成する#/

%macro cat(indata, variable); 
    proc sql noprint; 
    select distinct &variable. into :mvals separated by '|' 
    from &indata.; 

    %let mdim=&sqlobs; 
    quit; 

    data &indata.; 
    set &indata.; 
    %do _i=1 %to &mdim.; 
     %let _v = %scan(&mvals., &_i., |); 
     if &variable. = &_v. then &variable.&_v. = 1; else &variable.&_v = 0; 
    %end; 
    run; 
%mend; 

/#マクロを呼び出し、データセット名と変数を渡すタイプに基づいて名前を指定します。タイプ= 2、それは変数#/

data _null_; 
set var_names; 
if type=2 then call execute('%cat(model_data,'||name||')'); 
run; 
+0

SASは、ダミーが必要とされているほとんどの手順でCLASSステートメントを持っている、とあなたはダミーを作成する必要がないときSASは、あまりにもそのためのprocesuresを持っています。 PROC GLMMODとPROC TRANSREGは良いスタート地点です。 –

+0

望ましくない結果は何ですか?さらに重要なのは、望ましい結果は何か? –

+0

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

答えて

2

を参照してくださいカテゴリである場合、私は、このためのマクロとデータの手順を使用してお勧めしません。 SASは、すべての重労働を解決する素晴らしいソリューションを持っています。簡単でよく文書化されています。

data nominal; 
    infile datalines dsd; 
    input hair$ eye$; 
datalines; 
brown,brown 
brown,blue 
red,blue 
red,brown 
;;;; 

proc transreg design; 
    model class(hair eye/zero=none); 
    output out=dummies(drop=_: intercept); 
    run; 
%put NOTE: Dummies: &=_TRGINDN &=_TRGIND; 
proc print; 
    run; 

enter image description here

関連する問題