2015-03-30 2 views
0

У меня часто есть данные, у которых есть дата1 и дата2. Дата1 - это дата, которую мы предполагаем, будет иметь событие и дату2 событие. Мне обычно нужно сделать 2 фиктивных переменных, где я увеличиваю число 1 вперед в неделю и обратно, а затем сравниваю с другим 2. Однако я продолжаю думать, что должен быть лучший способ создать диапазон дат, а затем сравнить со второй датой!Лучший способ сделать/сравнить диапазоны дат?

Есть ли способ сделать это в салах? В основном я хочу взять date1 и date2 и сделать этот набор данных и мне интересно, если я должен создать 2 дополнительные переменные (date1-7 дней и date1 + 7дней) Input datset:

DATE1   DATE2  



10/23/2014 2/12/2015  


2/12/2015 2/10/2015  

Токовый выход:

DATE1_wk_before Date1_wk_after Дата2 In_range_indicator

10/16/2014    10/30/2014  2/12/2015  0 


2/05/2015     2/19/2015  2/10/2015  1 

Где In_range_indicator = 1, если дата находится в диапазоне, и 0, если не находится в диапазоне

Я хочу знать, могу ли я сделать это, где я делаю что-то вроде In_range_indicator = 1, где Date2 находится в диапазоне (неделя до даты1, неделя после даты1), не создавая 2 дополнительных набора данных. Кажется, пустая трата времени.

Я ЛИТЕРАТУРНО добавляю 7 дней и вычитаю 7 дней до и после, и это кажется плохим способом сделать это.

+0

Вы не дают достаточно информации для того, что вы здесь делаете - это на самом деле не имеет смысла. Пожалуйста, представьте пример исходных наборов данных, то, что вы пытаетесь определить, и окончательный желаемый набор данных, а также код, который вы теперь используете, чтобы добраться туда. – Joe

ответ

0

Кажется, вы просто хотите установить значение переменной на основе условия. Нет необходимости, чтобы получить слишком умный с ним, просто if и else в вашем шаге данных:

if date2 ge date1-7 and date2 le date1+7 then ind=1; 
else ind=0; 
0

Согласен с @DWal, просто если и другое заявление может помочь. Вы также можете использовать функцию IFN.

data mydates; 
infile datalines missover; 
input (date1-date2) (:mmddyy10.); 
In_range_indicator=ifn(date1-7 <= date2 <= date1+7 , 1,0); 
format date1-date2 yymmdd10.; 
datalines4; 
10/23/2014 2/12/2015 
2/12/2015 2/10/2015 
;;;; 
run; 
proc print data=mydates;run; 
Смежные вопросы