什么是这个SAS宏的Stata等价物?

时间:2017-02-22 21:37:30

标签: stata

我将介绍我想要做的简化版本。我知道如何在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已定义”

1 个答案:

答案 0 :(得分:0)

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

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

 gen y = x <= 42 

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

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

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

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

记录在案。例如,请参阅13.2.2 in [U]this FAQ