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

这个SAS宏的Stata等价物是什么?,stata,Stata,我将介绍我想做的事情的简化版本。我知道如何在SAS中轻松完成,但在Stata中却不知道。 假设我正在尝试创建一个“poor”二元变量=1,如果一个观测值被分类为poor,否则为0。我想有两种分类,一种是基于实际收入,另一种是基于实际消费(这些是数据集中的变量) SAS宏将是 %MACRO poverty_bin(type=, measure=) DATA dataset; SET dataset; IF &measure. <= poverty_line THEN

我将介绍我想做的事情的简化版本。我知道如何在SAS中轻松完成,但在Stata中却不知道。 假设我正在尝试创建一个“poor”二元变量=1,如果一个观测值被分类为poor,否则为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);

但是它给出了一条错误消息,说“可变真实收入已经定义”

您引用的错误消息意味着您没有向我们展示的早期代码创建了一个变量
真实收入

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

 gen y = x <= 42 
对于完全任意的现有名称、新名称和阈值,单独写出语句可能更容易


这是有案可查的。例如,参见或

您好,谢谢您的回复,但我知道如何生成这样的二进制变量。我只是举一个例子来说明我的问题,即如何编写一个与SAS宏大体相当的stata宏。我知道它们都有非常不同的数据处理过程。我熟悉在Stata中循环变量列表等,但不熟悉如何将字符串变量列表合并到主宏函数中。我也不知道是否有一种方法可以在Stata中定义一个宏函数,就像在SAS中一样(我在这里把它命名为“poverty_bin”),正如前面所说的,你可以为此编写一个循环,甚至一个程序。
 gen y = x <= 42 
foreach v in x y { 
    gen new`v' = `v' <= 42 
}