2014-11-18 3 views
1

У меня есть один набор данных (mydata) с идентификатором, именем, start_date, end_date и кодом. Тогда у меня есть другой набор данных (коды), который содержит только один столбец, который является кодовым списком. Я хочу найти способ увидеть, соответствует ли код каждого отдельного человека ЛЮБОЙ из кодов в списке кодов (между 1 января 2004 года и 31 декабря 2005 года). Я пытался поставить все коды из списка кодов в список макросов переменного, но есть слишком много коды в списке кодов и поэтому он получает усечен ...Проверка наличия каждого значения в одном наборе данных равным ЛЮБОМ значению в другом столбце набора данных

это мой код до сих пор:

proc sql noprint; 
    select distinct * 
    into : codelist separated by ' ' 
    from codes 
quit; 

data 20042005; set mydata codes; 
match = 0; 
    if code in (%codelist) AND start_date >= '01jan2004'd AND end_date <='31dec2005'd 
    THEN match = 1; 
run; 

Любая помощь будет оценена!

спасибо :)

+0

Как выглядит таблица кодов? У вас есть несколько столбцов или один столбец. Если коды являются символами, вам нужно будет процитировать переменную так, чтобы вместо нее было указано следующее: proc sql; выберите отдельную цитату (код) в: список кодов, разделенный символом '' от кодов; уволиться; – Reeza

+0

все коды являются численными. только один столбец в обоих наборах данных. Я просто хочу узнать, соответствует ли каждое значение кода в наборе данных mydata ЛЮБОЙ из значений в наборе данных кодового списка. Это помогает прояснить ситуацию? – Mixcels

ответ

2

Вы можете использовать SQL-влево присоединиться, чтобы проверить переменные. Возможно, вам необходимо будет добавить условия либо к заявлению дела, либо к пункту:

DATA CODES; 
    DO CODE=1 TO 100; 
     OUTPUT; 
    END; 
RUN; 

DATA MY_CODES; 
    DO CODE=50 TO 150; 
     OUTPUT; 
    END; 
RUN; 

Proc sql; 
Create Table Check as 
select a.*, case when a.code=b.code then 1 
       else 0 end as match 
from MY_CODES a 
left join codes b 
on a.code=b.code; 
quit; 
+0

не будет «левым соединением» присоединиться к таблицам таким образом, что только один код из списка кодов будет назначен одному человеку из набора mydata? в базовых терминах я просто хочу: выберите код из mydata. выполните поиск по другому набору данных, как если бы это был список. если код из mydata равен ЛЮБОЙ из кодов из кодового списка, создайте новую переменную с именем match, которая будет равна 1. Повторите строки для всех наблюдений в mydata. – Mixcels

+0

Нет, любой код в первой таблице (слева) найдет совпадение, если его во второй таблице. Попробуйте :) – Reeza

+0

Вы правы! Благодаря! – Mixcels

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

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