【问题标题】:What is the Stata-equivalent of this SAS macro?这个 SAS 宏的 Stata 等效项是什么?
【发布时间】:2017-02-23 12:58:44
【问题描述】:

我将介绍我想做的简化版。我知道如何在 SAS 中轻松做到这一点,但在 Stata 中却不知道。 假设我正在尝试创建一个“差”的二进制变量 = 1 如果观察被分类为差,否则为 0。我想有两种分类,一种基于实际收入,另一种基于实际消费(这些是数据集中的变量)。

SAS 宏是

%MACRO poverty_bin(type=, measure=)
DATA dataset;
    SET dataset;
    IF &measure. <= poverty_line  THEN poor&type. = 1 ELSE poor&type. = 0;
RUN;
%MEND

%poverty_bin(type=con, measure=real_consumption);
%poverty_bin(type=inc, measure=real_income);

应该创建两个二进制变量poor_conpoor_inc

我不知道如何在 Stata 中执行此操作。我尝试做这样的事情只是为了看看嵌套的foreach 是否是我正在寻找的:

foreach x of newlist con inc {
   foreach y  of newlist real_income real_consumption{
       display "`x' and `y'"
   }
} 

但它给出了一条错误消息,说“变量 real_income 已经定义”

【问题讨论】:

    标签: stata


    【解决方案1】:

    您引用的错误消息暗示您未向我们展示的早期代码创建了一个变量real_income

    我不知道 SAS,但我可以告诉你,给定一个数字变量 x

     gen y = x <= 42 
    

    将创建一个变量y,如果x &lt;= 42,则其值为1,否则为0。

    对于另一个这样的变量,使用另一个类似的语句。在 Stata 和任何其他语言中,设置嵌套循环或定义程序而不是直接创建两个语句似乎有点过头了。对于许多远大于 2 的新变量,这可能不是真的。

    foreach v in x y { 
        gen new`v' = `v' <= 42 
    } 
    

    对于完全任意的现有名称、新名称和阈值,单独编写语句可能更容易。

    这是记录在案的。参见例如13.2.2 in [U]this FAQ

    【讨论】:

    • 您好,谢谢您的回复,但我知道如何生成这样的二进制变量。我只是把它作为一个例子来说明我的问题,即如何编写一个与一般 SAS 宏等效的 stata 宏。我知道他们都有完全不同的数据处理程序。我熟悉在Stata中循环变量列表等,但不熟悉如何将可以连接到主宏函数中的字符串变量列表合并。我也不知道是否有办法像在 SAS 中一样在 Stata 中定义宏函数(我在这里将其命名为“poverty_bin”)。
    • 如前所述,您可以为此编写循环甚至程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2016-12-11
    • 1970-01-01
    • 2016-04-11
    • 2011-01-05
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多