SAS宏到R%sysfunc

时间:2014-01-29 09:29:50

标签: r sas lag file-conversion

我目前正致力于将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_))); 

这里,date,id等都是我当前数据集中的变量。我理解函数 tranwrd 用于将值替换为Character变量中的另一个值。在这种情况下,它会创建新项目 -

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或数据集来尝试检查结果。对此的任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:4)

以下代码基本上是创建宏变量来保存要处理的变量列表。 (注意: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陈述就是这样。