2016-08-16 1 views
0

У меня есть набор данных CASE_ID (x y и z), набор из нескольких дат (включая повторяющиеся даты) для каждого CASE_ID и переменной VAR. Я хотел бы создать фиктивную переменную DUMMYVAR по группе внутри группы, в которой, если VAR = «C» для CASE_ID x на определенную дату, тогда DUMMYVAR = 1 для всех наблюдений, соответствующих CASE_ID x с этой датой.SAS: кодирование переменной-заглушки для значения переменной по группе внутри группы

Я считаю, что здесь был бы классический 2XDOW, но это моя третья неделя, использующая SAS и с трудом получая это двумя группами BY здесь.

я ссылки и попытался написать изменение кода Haikuo здесь:

PROC SORT have; 
     by CASE_ID DATE; 
    RUN; 

    data want; 
    do until (last.DATE); 
     set HAVE; 
     by date notsorted; 
     if var='c' then DUMMYVAR=1; 

    do until (last.DATE); 
     set HAVE; 
     by DATE notsorted; 

     if DATE=1 then ???????? 

    end; 
    run; 

ответ

0

Изменить ваши заявления, чтобы соответствовать группировке вы делаете. А во втором цикле добавьте простой оператор OUTPUT;. Тогда ваш новый набор данных будет иметь все строки в исходном наборе данных и новую переменную DUMMYVAR.

data want; 
    do until (last.DATE); 
    set HAVE; 
    by case_id date; 
    if var='c' then DUMMYVAR=1; 
    end; 
    do until (last.DATE); 
    set HAVE; 
    by case_id date; 
    output; 
    end; 
run; 

Это создаст переменную DUMMYVAR со значениями 1 или отсутствует. Если вы хотите, чтобы значения были 1 или 0, вы могли либо установить его на 0 перед первым циклом DO. Или добавьте оператор if first.date then dummyvar=0; перед существующим оператором IF.

Смежные вопросы