SAS宏到R%sysfunc

SAS宏到R%sysfunc,r,sas,lag,file-conversion,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_))); 这里,日期、id等都是我当前数据集中的变量。我知道函数tranwrd用于用字符变量

我目前正在将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_))); 
这里,日期、id等都是我当前数据集中的变量。我知道函数tranwrd用于用字符变量中的另一个值替换一个值。在这种情况下,它将创建新项作为-

vars_l = lag_date lag_id lag_sales lag_units
我说得对吗?什么是变量?这是一张单子吗?或者这些变量是添加到我的数据集中的? 另外,在下面的代码中,%sysfunc之前的lag有什么用途

%let vars_l = lag_%sysfunc(tranwrd(&vars,%str( ),%str( lag_))); 
是否完全创建了滞后变量,还是仅创建了不带前缀lag_uu的值的变量


我无法访问SAS或数据集来尝试检查结果。这方面的任何帮助都会很好。谢谢

下面的代码基本上是创建宏变量来保存要处理的变量列表。(注意:SAS中的宏只是文本替换!)

如果运行以下代码(要查看
VARS
VARS\u 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="")

VARSTrue。以下行确实有一个merge命令和RETAIN VARS_L语句。但这意味着什么?创建了四个新的滞后列,但这些变量中的单元格值是什么?@RHelp:您确实需要发布完整的SAS代码(使用RETAIN语句)。这取决于RETAIN变量的初始值。以及在代码的后面部分中赋值的方式。
VARS<-c("date", "id", "sales", "units" )
vars_l<-paste("lag_",VARS, sep="")