将SAS语句分配给宏变量

将SAS语句分配给宏变量,sas,sas-macro,Sas,Sas Macro,我有一个数据集,其中包含要为宏中的数据集定义的变量的名称和属性。例如: variable_name = "filedate" variable_length = 8 variable_label = "Date file was loaded" variable_format = "date9." variable_derivation = "filedate = today()" 宏执行如下操作: %macro create_ds; data _null_;

我有一个数据集,其中包含要为宏中的数据集定义的变量的名称和属性。例如:

variable_name = "filedate"  
variable_length = 8  
variable_label = "Date file was loaded"  
variable_format = "date9."
variable_derivation = "filedate = today()"
宏执行如下操作:

%macro create_ds;  

    data _null_;
    set variable_definitions;
        call symputx('varname', variable_name);
        call symputx('varlength', variable_length);
        call symputx('varlabel', variable_label);
        call symputx('varformat', variable_format);
        call symputx('varderive', variable_definition);
    run;  

    data newds;
        attrib &varname length=&varlength label="&varlabel" format=&varformat;
        &varderive;
    run;

%mend create_ds;
我希望datastep看起来是这样的:

data newds;
    attrib filedate length=8 label="Date file was loaded" format=date9.;
    filedate = today();
run;
我实际上得到的是:

data newds;
    attrib filedate length=8 label="Date file was loaded" format=date9.;
    .;
run;
然后它抛出一个错误,因为“.”不是有效语句


是否有方法将datastep语句分配给宏变量并实际执行它?

键入错误,variable\u derivation=“filedate=today()”但随后调用symputx('varderivate',variable\u definition);派生vs定义。是的。你有一个好主意。因为这是在分配missing,否则就可以了。@Reese和Joe,既然你们两个有效地回答了这个问题,我建议你们发布一个答案。:)