2015-07-14 1 views
0

Я работаю над очень большим набором данных (более 100 переменных и 11 миллионов наблюдений). В этом наборе данных у меня есть переменная с именем DTDSI (дата моделирования) в DATE9. формат. (Например: 01APR2015, 02MAR2015 ...). У меня есть макро-программа для анализа этого набора данных пути сравнения наблюдений в 2-х разные месяцах:MONYY7. и DATE9. операции

%macro analysis (data_input , m , m_1); 
..... 
%mend; 

В 2 макро переменных м и m_1 являются месяцами, что я хочу, чтобы сравнить. Их формат - MONYY7 (APR2015, MAR2015 ...). Имейте в виду, что я не могу изменить свой data_input (данные моей компании). В начале моей макропрограммы я хочу создать новый набор данных только с наблюдениями & м и & м_1 месяца. Я легко могу это сделать, создав новую переменную даты из DTDSI (real_month для ex), но в формате MONYY7. Тогда я просто выбрать наблюдения, где real_month равно & м или real_month равна & м:

Data new; 
Set &data_input; 
mois_real = input(DTDSI,MONYY7); 
RUN; 

PROC SQL; 
CREATE TABLE NEW AS; 
SELECT * 
WHERE mois_real in ("&m" , "&m_1") 
FROM NEW; 
.... 

Проблема заключается в том, что в своем первом заявлении данных, я дублируется мой data_input; что плохо, потому что прошло 30 минут. Можете ли вы рассказать мне, как я могу сделать свой выбор (DTDSI = m и DTDSI = m_1) прямо в моем первом заявлении?

ответ

0

Вы можете использовать формулу в своем условии/if, поэтому примените формулу с шага 1 на шаг 2 или наоборот.

Data new; 
set &data_input; 
WHERE put(DTDSI,MONYY7) in ("&m" , "&m_1"); 
run; 
+0

Спасибо, плохо попробуйте завтра. – buiquanghai

+0

Это не сработает. Если я правильно прочитал, 'dtdsi' - это переменная date, а' & m' - текст, структурированный как 'MONYY7.'. Итак, 'где put (dtdsi, monyy7.) В (" & m "," &m_1"); 'кажется правильным. – Joe

+0

@Joe, uiquanghai Является ли dtdsi текстовой строкой или численным? –