Все еще довольно новый (и изо всех сил!) Для SAS, вот кое-что, что я действительно хотел бы сделать, но просто не могу понять: сохранять и обновлять / добавлять в список в скрипте SAS.
Ситуация: моя работа заключается в создании / сортировке наборов данных на основе большой базы данных для использования другими. Например, мы получаем список критериев выбора и запрошенных переменных, которые мы используем для создания набора данных в исследовательских целях. Некоторые из запрошенных переменных будут «готовы к отправке» в нашей базе данных, другие мы должны вычислить / создать в запрошенном формате. Мы пишем сценарии SAS, которые документируют весь процесс от выбора до написания набора данных для доставки. Это означает, что к концу есть шаг, когда мы выбираем из всех переменных в наборе данных, с которыми мы работаем, только те переменные, которые мы хотим доставить нашим «клиентам». Что я действительно хотел бы сделать, так это «построить» список переменных для доставки «как I go», т.е. добавить имя каждой переменной, которую я создал или подтвердил готовность к доставке, в список с именем «varstodeliver». ", так что в конце я могу просто сказать ему выбрать все переменные в" varstodeliver ". Возможно ли это?
Вот как далеко я продвинулся:
%let varstodeliver = IDvar;
%put &varstodeliver; * prints IDvar;
data _null_;
call symputx("varstodeliver", catx(" ", vname(&varstodeliver.), "var1 var2"));
run;
%put &varstodeliver; * prints IDvar var1 var2 ;
Обратите внимание, что я прибег к использованию vname (), чтобы получить реальное имя хранится в & varstodeliver. Пока все хорошо, но если я попытаюсь добавить четвертое имя переменной (точнее: третье добавление, поскольку предыдущее добавление состояло из двух имен переменных в одном go), оно остановится из-за слишком большого количества уровней & varstodeliver:
data _null_;
call symputx("varstodeliver", catx(" ", vname(&varstodeliver), "var3"));
run;
ОШИБКА: вызов функции VNAME имеет слишком много аргументов.
Ввод или идеи о том, как еще поддерживать подсчет, очень приветствуются !!
пс среди других вещей Я пытался это:
data _null_;
call symputx("varsteleveren", catx(" ", vlist(vname(&varsteleveren.(*))), "var3"));
run;
, который возвращает: ОШИБКА: необъявленный массив ссылается: var2. ОШИБКА: спецификация ARRAYNAME [*] требует массив. ОШИБКА: у вызова функции VNAME слишком много аргументов.