Stata中的编程问题

Stata中的编程问题,stata,Stata,考虑以下问题:我们已经定义了变量logA、logT、logtK和logtY,以及不同国家(变量国家)企业的值。 我们的目标是提供具有三个关键列的表: 第90百分位和第10百分位之间的差异、四分位范围和标准偏差 我不是Stata专家,但代码似乎太复杂,无法获得这些简单的统计数据。我正在寻找一个更简单的解决方案 以下几行导致错误: foreach var in logA logT logtK logtY{ forvalues z= 1(1)2{ preserve if `z'=

考虑以下问题:我们已经定义了变量logA、logT、logtK和logtY,以及不同国家(变量国家)企业的值。 我们的目标是提供具有三个关键列的表: 第90百分位和第10百分位之间的差异、四分位范围和标准偏差

我不是Stata专家,但代码似乎太复杂,无法获得这些简单的统计数据。我正在寻找一个更简单的解决方案

以下几行导致错误:

foreach var in logA logT logtK logtY{
 forvalues z= 1(1)2{
     preserve
     if `z'==1 table country , c(p50 `var') replace
     if `z'==2 table country , c(sd  `var' p25 `var' p75 `var' p10 `var' p90 `var') replace
     gen variable = "`var'"
     tempfile file`z'_`var'
     sort country
     save `file`z'_`var'', replace
     restore
 }    
}
这个很好用

preserve
foreach var in logA logT logtK logtY{
      use `file1_`var'', clear
      ren table1 table6
      merge country using `file2_`var''
      tempfile file_`var'
      save `file_`var'', replace
}
但此块会导致以下错误:

invalid file specification
r(198);
最后,此/这些表的代码以以下内容结尾:

foreach file in logTFPRsi logtau_Ksi logtau_Ysi{
 append using `file_`file''
}

ren table1 sd
gen p75_p25 = table3-table2
gen p90_p10 = table5-table4
gen p50_p10 = table6-table4
gen p50 = table6
drop table* _merge
order variable country 
sort  variable country
outsheet using "Table1.csv", comma names replace
restore

这里有很多乱七八糟的文件,这似乎是不必要的。在这段代码中,唯一的循环就是为单个调用
collapse
建立语法:

* invented dataset with same structure 
clear 
set obs 20 
gen country = cond(_n <= 10, "A", "B") 
set seed 2803
foreach v in logA logT logtK logtY { 
    gen `v' = runiform()
}

* blank out local macro, just in case 
local call 

* the heart of the matter is: just use collapse! 
foreach v in logA logT logtK logtY { 
    local call `call' (p10) p10`v' = `v' 
    local call `call' (p25) p25`v' = `v' 
    local call `call' (p75) p75`v' = `v' 
    local call `call' (p90) p90`v' = `v' 
    local call `call' (sd)  sd`v' = `v' 
}

collapse `call', by(country) 
*发明了具有相同结构的数据集
清楚的
设置obs 20

gen country=cond(您可能需要
“”如果创建
tempfile
s的目录或文件夹的名称中包含空格,则在
save
命令中使用
环绕文件名。另一个问题是,如果不使用临时文件,则保存临时文件没有意义。这可能需要在以后的代码中解决。请注意,使用
collapse
这里有一个更好的保存摘要统计信息的策略。这样可以避免重复内容的内部循环。此外,还不清楚您是否定义了在第二段中使用的所有本地宏和/或临时名称。事实上,您的代码太多,无法解释这是一个明确的问题oesn未提及前3条评论中的任何一条。