Sas 保留宏创建的变量

Sas 保留宏创建的变量,sas,Sas,我有以下代码,其中我重命名列名;我只想保留宏创建的变量。我确实意识到我可以删除旧的变量,但我很好奇是否有一个保留选项可以放在宏中 例如,在datastep中,我只想保留以“%transform_this(JUNE19)”开头的变量 谢谢 %macro transform_this(x); &x._Actual=input(Current_Month, 9.0); &x._Actual_Per_Unit = input(B, 9.); &x._Budget=inpu

我有以下代码,其中我重命名列名;我只想保留宏创建的变量。我确实意识到我可以删除旧的变量,但我很好奇是否有一个保留选项可以放在宏中

例如,在datastep中,我只想保留以“%transform_this(JUNE19)”开头的变量

谢谢

 %macro transform_this(x);
 &x._Actual=input(Current_Month, 9.0);
 &x._Actual_Per_Unit = input(B, 9.);
 &x._Budget=input(C, 9.);
 &x._Budget_Per_Unit=input(D, 9.);
 &x._Variance=input(E, 9.);
 &x._Prior_Year_Act=input(G, 9.);
 Account_Number=input(H, 9.);
 Account_Description=put(I, 35.);
 &x._YTD_Actual=input(Year_to_Date, 9.);
 &x._YTD_Actual_Per_Unit=input(L, 9.);
 %mend transform_this;

 data June_53410_v1;
 set June_53410;
 %transform_this(JUNE19);
 if Account_Description='Account Description' then DELETE; 
 Drop Current_Month B C D E G H I Year_to_Date L M N;
 run; 
这使得所有变量都从June19和Account开始,这是您需要的变量

这使得所有变量都从June19和Account开始,这是您需要的变量

我很好奇是否有一个保留选项,我可以放在宏内

您完全可以在宏中使用
keep

%macro transform_this(x);
    keep &x._Actual &x._Actual_Per_Unit
         &x._Budget &x._Budget_Per_Unit
         &x._Variance &x._Prior_Year_Act
        Account_Number Account_Description 
        &x._YTD_Actual &x._YTD_Actual_Per_Unit
    ;

    &x._Actual=input(Current_Month, 9.0);
    /* ...and the rest of your code */
%mend transform_this;
你有什么理由认为你不能

我很好奇是否有一个保留选项,我可以放在宏内

您完全可以在宏中使用
keep

%macro transform_this(x);
    keep &x._Actual &x._Actual_Per_Unit
         &x._Budget &x._Budget_Per_Unit
         &x._Variance &x._Prior_Year_Act
        Account_Number Account_Description 
        &x._YTD_Actual &x._YTD_Actual_Per_Unit
    ;

    &x._Actual=input(Current_Month, 9.0);
    /* ...and the rest of your code */
%mend transform_this;

您认为不能执行的原因是什么?

在数据步骤中添加两个sentinel变量,一个在宏调用之前,一个在宏调用之后。在
keep
语句中使用双破折号
--
变量名列表构造,并在数据步骤输出数据集说明符
drop=
选项中删除哨兵

data want (drop=sentinel1 sentinel2); /* remove sentinels */
  set have;
  retain sentinel1 0;
  %myMacro (…)
  retain sentinel2 0;
  … 
  keep sentinel1--sentinel2;  * keep all variables created by code between sentinel declarations;
run;

名称范围列表依赖于变量定义的顺序,如中所示 下表:

名称范围列表

变量列表
包含的变量
x--a
按变量定义顺序排列的所有变量,从 变量x到变量a(含)
x-数值-a
从变量x到变量a的所有数值变量
x-字符-a
从变量x到变量a的所有字符变量

注意:注意,名称范围列表使用双连字符(
--
)来指定 变量之间的范围和编号范围列表使用单个 连字符以指定范围


向数据步骤添加两个sentinel变量,一个在宏调用之前,一个在宏调用之后。在
keep
语句中使用双破折号
--
变量名列表构造,并在数据步骤输出数据集说明符
drop=
选项中删除哨兵

data want (drop=sentinel1 sentinel2); /* remove sentinels */
  set have;
  retain sentinel1 0;
  %myMacro (…)
  retain sentinel2 0;
  … 
  keep sentinel1--sentinel2;  * keep all variables created by code between sentinel declarations;
run;

名称范围列表依赖于变量定义的顺序,如中所示 下表:

名称范围列表

变量列表
包含的变量
x--a
按变量定义顺序排列的所有变量,从 变量x到变量a(含)
x-数值-a
从变量x到变量a的所有数值变量
x-字符-a
从变量x到变量a的所有字符变量

注意:注意,名称范围列表使用双连字符(
--
)来指定 变量之间的范围和编号范围列表使用单个 连字符以指定范围


当我看到这样一个过程时,我怀疑某个地方可能需要转置,所以完整的解决方案每个月都是动态的。当我看到这样一个过程时,我怀疑某个地方可能需要转置,所以完整的解决方案每个月都是动态的。这似乎是合法的,但我找不到官方参考中记录的地方。你有链接吗?这似乎是合法的,但我找不到官方参考文件中的记录。你有链接吗?