1

我在 Stata 12 中有一个循环,它查看文件中的每条记录,如果发现flag等于 1,它会生成五个估算值。我的代码如下所示:

forvalues i=1/5 {
 gen y3`i' = y2
 gen double h`i' = (uniform()*(1-a)+a) if flag==1
 replace y3`i' = 1.6*(invibeta(7.2,2.6,h`i')/(1-invibeta(7.2,2.6,h`i')))^(1/1.7) if 
   flag==1
 } 

a在别处定义。我想检查个人估算。flag因此,我只需要在=1的情况下才显示估算变量。我还想在s旁边显示另一个值 , 。我需要帮助来弄清楚语法。我已经尝试了所有我能想到的引号和下标组合,但我不断收到错误消息。

我想到了另一个有用的修改。假设我有三个要在其上执行此例程的连接文件。让他们有一个等于 1、2 或 3 的变量文件。我想为每个设置一个单独的种子并在我的程序中执行它,以便我有一个记录。我设想是这样的:

forvalues j=1/3 {
set seed=12345 if file=1
set seed=56789 if file=2
set seed=98765 if file=3

insert code above

}

这行得通吗?

4

2 回答 2

3

无法对未显示的代码发表评论,但“显示”一词可能会误导您。

  list y3`i' if flag == 1 

或者某些变化可能是您所寻求的。请注意,这display适用于一次最多显示一条输出。

PS 因为你是威廉·莎士比亚,所以知道杯子http://www.stata.com/giftshop/much-ado-mug/的灵感来自你的作品。

于 2013-09-02T16:29:09.327 回答
0

一个附属问题询问每次围绕循环选择不同的种子。这很容易:

  forval j = 1/3 { 
       local seed : word `j' of 12345 56789 98765 
       set seed `seed' 
       ...
  }

或者

  tokenize 12345 56789 98765 
  forval j = 1/3 { 
         set seed ``j'' 
         ...
  } 
于 2013-09-02T21:45:54.997 回答