SAS создает несколько таблиц на основе заданных символьных элементов
ОБНОВЛЕНИЕ Мне сказали, что это невозможно с использованием массивов из-за того, как они хранятся. Это немного меняет мой вопрос, но суть остается прежней. Как наиболее эффективно сгенерировать нужные мне таблицы из заданного вектора значений (например, день, неделя, месяц, год), не повторяя код несколько раз? Есть ли способ просто заменить данное значение даты в INTX
в цикле?
Хорошо, это мой последний вопрос на эту тему, обещаю. После некоторых полезных советов я использую INTX
функция. Однако я хотел бы просто просмотреть различные категории, которые я выбрал, и создать таблицы. Я пробовал это, но безрезультатно.
data;
array period [*] $ day week month year;
run;
%MACRO sqlloop;
proc sql;
%DO k = 1 %TO dim(&period); /* in case i decide to drop/add from array later */
%LET bucket = &period[&k];
CREATE TABLE output.t_&bucket AS (
SELECT INTX( "&bucket.", date_field, O, 'E') AS test FROM table);
%END
quit;
%MEND
%sqlloop
К сожалению, это не работает, потому что я как-то запутал ссылку на массив. Если я смогу сделать этот шаг, я буду в хорошей форме.
1 ответ
Вы можете заменить свой массив строкой макропеременной:
%let period=day week month year;
Затем в вашем макросе вы перебираете слова в переменной макроса:
%MACRO sqlloop;
proc sql;
%DO k = 1 %TO %sysfunc(countw(&period.)); /*fixed extra s*/
%LET bucket = %scan(&period.,&k.);
CREATE TABLE output.t_&bucket AS (
SELECT INTNX( "&bucket.", date_field, 0, 'E') AS test FROM table);
%END;
quit;
%MEND;
%sqlloop
редактировать вы забыли несколько точек с запятой, по-видимому.:п