【问题标题】:Initializing a SAS DATA set with global macro variables by incrementing通过递增使用全局宏变量初始化 SAS DATA 集
【发布时间】:2017-03-19 23:23:30
【问题描述】:

我是 SAS 新手,如果这个问题太简单,我深表歉意。我已尝试对此进行广泛搜索,但我不清楚如何继续。

我正在尝试使用与已存在的宏变量 var1、...、varN 对应的特征来初始化一个新的 SAS 数据集。为简单起见,假设 N 在这些变量的生成过程中已经定义为宏变量。我想按照以下代码行做一些事情,但不起作用:

%let var1 = 3;
%let var2 = 2.5;
%let var3 = 1;
[...]
%let varN = 2;


Data ABC;
  do i = 1 to &N;
    x = var&i.;
  end;
run;

我认为问题之一是与 %do 不同,“i”不是宏变量。我在 cat(var,i) 上尝试过变体,但它没有所需的行为,因为我希望 &var&i 解决。 有没有办法在 DATA 步中完成这项工作?

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    我无法想象这样做实际上是一个好主意的情况,但是,这里有一个答案。你不能使用标准的宏变量 &&var&i 因为你需要一个 %DO 循环。要将其保存在数据步骤中,请使用 SYMGET。

    %let var1=1;
    %let var2=2;
    %let var3=3;
    %let N=3;
    
    Data ABC;
        do i=1 to &N;
            x = symget(catt('var', i)); *character value;
            y = symgetN(catt('var', i)); *numeric value;
            output;
        end;
    run;
    
    proc print data=abc;
    run;
    

    【讨论】:

    • 谢谢你,@Reeza。你能告诉我为什么这不是一个好主意吗?有什么更好的方法?
    • 谢谢@data_null_,我已经做出了改变。
    • 嗨@Reeza,你是否放弃了我关于什么是更好的方法的问题?
    • @Lepidopterist 将数据保存在数据集中,并且可能是合并或格式。根据整体使用情况,可能还有其他方法。想法是首先避免使用宏变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多