试图导出p值

时间:2018-02-22 00:30:23

标签: stata

我正在尝试编写一个循环来对变量列表(class Ticket { public DateTime PurchaseDate { get; set; } public override string ToString() { return PurchaseDate.ToShortDateString(); } } public static bool BoughtBetween(Ticket ticket, DateTime from, DateTime to) { return ticket?.PurchaseDate >= from && ticket.PurchaseDate <= to; } )进行单独的t检验,并使用tab1命令将平均值和p值导出到Excel。现在我的代码看起来像这样:

putexcel

不幸的是,现在我只得到 putexcel set "Ttests.xlsx", sheet("t_test") replace local n_models: word count `tab1' forval i=1/`n_models' { mat T=J(`n_models',4,.) foreach x of tab1 { ttest `x', by(var) mat T[`i',1] = r(mu_1) mat T[`i',2] = r(mu_2) mat T[`'i,3] = r(mu_1) - r(mu_2) mat T[`i',4] = r(p) } } putexcel A1= matrix(T) 的第一个变量的均值/ p值。我做错了什么?

1 个答案:

答案 0 :(得分:0)

这不是一个最小,完整或可验证的例子。有关此标准,请参阅https://stackoverflow.com/help/mcve

  1. 没有数据示例。
  2. 未定义本地宏tab1
  3. 即使修复了这些代码,代码也是非法的,因为of tab1循环中foreach是非法的,并且当标点符号错误时,将内容放入矩阵的第三列的指令会被破坏。这来自于释义代码,而不是向我们展示一个能够完成您所说的内容的版本。
  4. 所以,关键是要向我们展示符合您所说内容的代码。

    所有这一切,你的问题都是概念性的:

    更大的交易1 您有两个嵌套循环,在计数器上以及您想要作为响应的变量上。但是你只需要一个循环。你想循环变量,同时提高计数器。或者,您想循环计数器,同时选择另一个变量。你做到这一点并不重要,至少对Stata来说。

    更大的交易2 您的代码(我猜是什么)会发生什么?追踪它。假设你的变量数是4.所以,最后一次围绕外循环,你将整个矩阵重置为缺失,然后在内循环中循环变量,每次尝试将每个变量的结果放在第4行你的矩阵(即同一行!)。与您的报告相反,我猜您在电子表格中看到的是 last 变量的结果,而不是第一个。

    我认为您希望代码更像这样:

    sysuse auto, clear
    
    local tab1 mpg price 
    local var foreign 
    
    putexcel set "Ttests.xlsx", sheet("t_test") replace
    local n_models: word count `tab1'
    mat T = J(`n_models', 4, .)
    tokenize `tab1' 
    
    forval i=1/`n_models' {
         ttest ``i'', by(`var')
         mat T[`i',1] = r(mu_1)
         mat T[`i',2] = r(mu_2)
         mat T[`i',3] = r(mu_1) - r(mu_2)
         mat T[`i',4] = r(p)
    }
    
    putexcel A1 = matrix(T)