2016-05-27 3 views
0

У меня есть данные с изменением состояния в США. Теперь я хочу создать много манекенов для управления эффектом исправления состояния. В stata это простая работа, в то время как в sas мне кажется, что я должен создать все манекены вручную. Однако регрессия logit с исправлениями довольно медленная в stata. Интересно, существует ли более эффективный способ создания манекена из переменных char (не числовых, которые я знаю несколько методов для применения) в sas, так как у меня слишком много переменных char, которые нужно создать как соски. Cheers, EvaСоздайте макет, используя более эффективные переменные категории в SAS

+0

Какой PROC вы используете? Вы использовали инструкцию CLASS? – Tom

ответ

0

proc logistic поддерживает заявление class. Поместите переменные в оператор 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

Не все проки поддерживают class заявление, в тех случаях, вы можете использовать proc glmmod или различные другой метод для создания фиктивных переменных.

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; 

Вы можете добавить петлю в макрос, если хотите вызвать макрос только один раз. Добавьте петлю 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; 
Смежные вопросы