2016-05-26 7 views
0

В SAS, я хочу, чтобы определить переменную new_var по следующим критериям:SAS как verifiy если значение существует

Для каждого id, если существуют reference='A', то new_var='A'; else new_var='B' для Exemple:

id reference new_var 
-- --------- ------- 
1 A   A 
1 B   A 
1 C   A 
2 B   B 
2 B   B 

Спасибо заранее!

ответ

2

Вы можете присоединиться к наблюдениям, где ссылка является для исходного набора данных на идентификатор уровня основе:

data have; 
    input id $ reference $; 
    datalines; 
    1  A 
    1  B 
    1  C 
    2  B 
    2  B 
    ; 
run; 

proc sql; 
    create table want as select 
     a.id, a.reference, 
     case when b.reference = "A" then "A" else "B" end as new_var 
     from have as a 
     left join have (where = (reference = "A")) as b 
     on a.id = b.id 
     order by a.id, a.reference; 
quit; 
+2

Я печатал это, когда вы его разместили. Точно, что я буду делать. – DomPazz

1

Если данные так же просто, как ваш пример и сортируются по идентификатору и ссылкам, то это просто проверка контрольного значения для каждого изменения идентификатора (с использованием first.id). Оператор retain копирует значение new_var для каждой следующей строки с тем же идентификатором.

Этот метод не будет работать, если проверяемое контрольное значение не всегда в первую очередь в алфавитном порядке.

data have; 
input id reference $; 
datalines; 
1  A 
1  B 
1  C 
2  B 
2  B 
; 
run; 

data want; 
set have; 
by id reference; 
retain new_var; 
if first.id then do; 
    if reference='A' then new_var='A'; 
    else new_var='B'; 
end; 
run;