1

我有一个包含大约 40 个变量的数据集。其中大约一半是测量值,另一半是有关该观察的人口统计信息。每个 id 有两个观察入口和出口。我正在比较进入与退出时的测量方法。

我已经编写了代码来为每个测量运行 ttest 然后存储在一个 txt 文件中,这很好用。

现在我需要按人口统计变量进行一些分组。

我正在使用以下

by var1, sort: ttest var2 by stage 

stage 是定义观察是进入还是退出的变量。var1 是人口统计变量之一(例如性别、吸烟、饮酒),可以有 2-4 个编码值。

我要做的是循环运行此代码并写入文本文件。但是, r() 命令仅返回运行 ttest 的最后一组的结果。

它自己工作的代码,因为所有 ttest 结果都打印到结果屏幕,但是,并非所有结果都被写入文件。

例如,如果 var1 的可能值为 1 ,2 ,3 和 4 我只得到第 4 组的结果。

foreach var of var  ttlchol-exvol{
foreach v of var sex dm chf diastolic copd ckd Depression {
        capture by `v',sort: ttest `var' , by(stage)
        if !_rc {
        by `v',sort: ttest `var', by(stage)
        file write myfile2 ///
            %9s "`var'" _tab %7.3f (r(N_1)) ///
            _tab %7.3f (r(N_2))      _tab %7.5f (r(p_l)) /// 
            _tab %7.5f (r(p_u))      _tab %7.5f (r(p)) /// 
            _tab %7.5f (r(se))      _tab %7.3f (r(t)) /// 
            _tab %7.3f (r(sd_1))      _tab %7.3f (r(sd_2)) /// 
            _tab %7.3f (r(mu_1))      _tab %7.3f (r(mu_2)) /// 
            _tab %7.3 (r(df_t)) ///
            _n
                }
                                                            }
                            }

我已经寻找有关 STATA 如何处理 by , sort: 的更多详细信息,但我无法找到一种方法来捕获每次迭代的结果。

是否有可能获得 a by , sort: 函数的每次迭代的结果?如果是这样,我会怎么做?

4

1 回答 1

2

我不确定这是否可行,但我认为如果您单独运行每个 ttest,然后在每个 ttest 之后写入文件,而不是运行一次最多执行 4 个 ttest 的 bysort,它会有所帮助。这是我这样做的想法:

foreach var of var  ttlchol-exvol{
    foreach v of var sex dm chf diastolic copd ckd Depression {
        levelsof `v', local(coded_vals)
        foreach single_val of local coded_vals {
            capture ttest `var' if `v' == `single_val' , by(stage)
            if !_rc {
                ttest `var' if `v' == `single_val' , by(stage)
                file write myfile2 ///
                    %9s "`var', `v' = `single_val'" _tab %7.3f (r(N_1)) ///
                    _tab %7.3f (r(N_2))      _tab %7.5f (r(p_l)) /// 
                    _tab %7.5f (r(p_u))      _tab %7.5f (r(p)) /// 
                    _tab %7.5f (r(se))      _tab %7.3f (r(t)) /// 
                    _tab %7.3f (r(sd_1))      _tab %7.3f (r(sd_2)) /// 
                    _tab %7.3f (r(mu_1))      _tab %7.3f (r(mu_2)) /// 
                    _tab %7.3 (r(df_t)) ///
                    _n
             }
        }
    }
}

这里:

levelsof `v', local(coded_vals)

创建一个coded_vals具有所有v发生值的本地。然后它遍历这些值并对每个值进行一次测试,并将其记录到文件中。我不是文本格式化专家,但我还在你的文件编写器中添加了一行,记录了它的编码值v。如果您有任何问题,请告诉我。

于 2013-01-28T07:51:56.597 回答