首页 > 解决方案 > 如何替换具有相同前缀的多个变量的观察值?

问题描述

我试图确定计时器变量的哪些观察时间低于 15 秒。首先,我生成了变量speed,并尝试用 1 替换以 timer 开头的所有低于 15 的变量的观察值。

gen speed = 0
replace speed = 1 if timer* <15

但是,Stata 告诉我,

timer* invalid name
r(198);

可能会发生什么?我不确定如何在此处附加来自 Stata 的数据,对此的任何见解也将不胜感激。

标签: stata

解决方案


Stata 标签 wiki 有大量关于如何发布数据示例的详细信息。

发生的事情只是Stata不支持您的语法。事实上,甚至不清楚这可能意味着什么。

. clear

. set obs 1
number of observations (_N) was 0, now 1

. gen timer1 = 10

. gen timer2 = 20

. list

     +-----------------+
     | timer1   timer2 |
     |-----------------|
  1. |     10       20 |
     +-----------------+

. gen wanted1 = min(timer1, timer2) < 15

. gen wanted2 = max(timer1, timer2) < 15

. l

     +-------------------------------------+
     | timer1   timer2   wanted1   wanted2 |
     |-------------------------------------|
  1. |     10       20         1         0 |
     +-------------------------------------+

. 

一种猜测是,如果任何变量timer*小于 15,您需要一个为 1 的指标,在​​这种情况下,您需要计算观察中这些变量的最小值并将其与 15 进行比较。另一个猜测是您想要一个指标如果所有变量timer*都小于 15,则为 1,在这种情况下,您首先需要计算观测值中的最大值。对于上面的简单示例,功能min()max()服务都很好。对于 中包含更多变量的数据集timer*,您会发现更方便地访问egen函数rowmin()rowmax()

还有其他方法可以做到这一点,还有其他更疯狂的猜测你想要什么,但我会停在那里。


推荐阅读