Макрос SAS в R% sysfunc

В настоящее время я работаю над преобразованием сценария SAS в R. Поскольку я относительно новичок в SAS, мне трудно понять следующее утверждение:

VARS=date id sales units 
/* create lag event variable names to be used in the RETAIN statement */
%let vars_l = lag_%sysfunc(tranwrd(&vars,%str( ),%str( lag_))); 

Здесь дата, идентификатор и т. Д. - все переменные, присутствующие в моем текущем наборе данных. Я понимаю, что функция tranwrd используется для замены значения другим значением в символьной переменной. В этом случае он создает новые элементы как -

vars_l = lag_date lag_id lag_sales lag_units

Я прав? Что такое vars_l? Это список? Или эти переменные добавлены в мой набор данных? Также для чего в приведенном ниже коде используется задержка перед % sysfunc?

%let vars_l = lag_%sysfunc(tranwrd(&vars,%str( ),%str( lag_))); 

Запаздывающие переменные создаются вообще или создаются только переменные без значений с префиксом lag_?

У меня нет доступа к SAS или наборам данных, чтобы попытаться проверить результат. Любая помощь по этому поводу была бы замечательной. Спасибо!


person RHelp    schedule 29.01.2014    source источник


Ответы (1)


Следующий код в основном создает макропеременные для хранения списка переменных для обработки. (Примечание: макросы в SAS - это просто замена текста!)

%let VARS=date id sales units ;
/* create lag event variable names to be used in the RETAIN statement */
%let vars_l = lag_%sysfunc(tranwrd(&vars,%str( ),%str( lag_))); 

Если вы запустите следующий код (чтобы увидеть, что именно хранится в макросах VARS & vars_l, вы увидите в журнале следующее:

31         %put VARS::&VARS.;
SYMBOLGEN:  Macro variable VARS resolves to date id sales units
VARS::date id sales units
32         %put VARS_l::&VARS_L.;
SYMBOLGEN:  Macro variable VARS_L resolves to lag_date lag_id lag_sales lag_units
VARS_l::lag_date lag_id lag_sales lag_units

В R эквивалент будет следующим:

VARS<-c("date", "id", "sales", "units" )
vars_l<-paste("lag_",VARS, sep="")

Второе назначение макроса vars_l - это просто добавление lag_ к началу каждого значения, разделенного пробелами, в переменной макроса VARS. Поскольку первое значение не начинается с пробела, если вы опустите lag_ в начале %let vars_l = lag_%sysfunc(tranwrd(&vars,%str( ),%str( lag_)));, вы получите следующее, сохраненное в vars_l: date lag_id lag_sales lag_units

Из кода я вижу, что переменные еще не созданы, но позже вы должны найти data step, который это делает. Упоминание оператора RETAIN в комментариях говорит об этом.

person Community    schedule 29.01.2014
comment
Правда. В следующих строках есть команда слияния и инструкция RETAIN VARS_L. Но что это значит? Созданы четыре новых столбца задержки, но каковы значения ячеек в этих переменных? - person RHelp; 29.01.2014
comment
@RHelp: вам действительно нужно опубликовать полный код SAS (с оператором сохранения). Это зависит от того, какими значениями инициализируются переменные RETAIN. и как присваивание происходит в более поздней части кода. - person ; 29.01.2014