在stata中生成svy比率的程序
我编写了以下代码,将多个指标的平均结果制成表格:在stata中生成svy比率的程序,stata,Stata,我编写了以下代码,将多个指标的平均结果制成表格: program RESULTS_MEANS syntax varlist tempname v se local k : list sizeof varlist display as txt %12s "Variable" /// as txt %10s "Mean" /// as txt %12s "SE" /// as txt %12s "N" forval i = 1/`k'
program RESULTS_MEANS
syntax varlist
tempname v se
local k : list sizeof varlist
display as txt %12s "Variable" ///
as txt %10s "Mean" ///
as txt %12s "SE" ///
as txt %12s "N"
forval i = 1/`k' {
local var : word `i' of `varlist'
quietly svy: mean `var'
quietly estat size
quietly estat effects
matrix `v' = e(V)
scalar `se' = sqrt(el(`v',1,1))
display as txt %12s "`var'" ///
" " as res %9.0g _b[`var'] ///
" " as res %9.0g `se' ///
" " as res %9.0g e(N)
}
end
RESULTS_MEANS var1 var2
结果应该是这样的
Variable Mean SE N
var1 0.538 0.015 9396
var2 0.191 0.009 9396
当我修改程序以适应比率情况以计算var1/var2时,问题出现了
以下是修改后的代码:
program RESULTS_RATIOS
syntax varlist
tempname v se
local k : list sizeof varlist
display as txt %12s "Variable" ///
as txt %10s "Mean" ///
as txt %12s "SE" ///
as txt %12s "N"
forval i = 1/`k' {
local var : word `i' of `varlist'
quietly svy: ratio `var'
quietly estat size
quietly estat effects
matrix `v' = e(V)
scalar `se' = sqrt(el(`v',1,1))
display as txt %12s "`var'" ///
" " as res %9.0g _b[`var'] ///
" " as res %9.0g `se' ///
" " as res %9.0g e(N)
}
end
RESULTS_RATIOS (var1/var2)
斯塔塔给了我这个错误
/ invalid name
关于如何修改代码有什么建议吗 您的问题是,语法命令告诉Stata程序的参数是变量名列表,而var1/var2不是变量名。您需要一个不同的语法语句。下面是您的问题及其解决方案的演示
. clear
. set obs 1
number of observations (_N) was 0, now 1
. generate var1 = 1
. generate var2 = 2
. program RR
1. syntax varlist
2. display "parsed list: `varlist'"
3. end
. RR var1 var2
parsed list: var1 var2
. RR var3
variable var3 not found
r(111);
. RR var1/var2
/ invalid name
r(198);
. program SS
1. syntax anything
2. display "parsed list: `anything'"
3. end
. SS var1 var2
parsed list: var1 var2
. SS var3
parsed list: var3
. SS var1/var2
parsed list: var1/var2
.
您的问题是语法命令告诉Stata程序的参数是变量名列表,而var1/var2不是变量名。您需要一个不同的语法语句。下面是您的问题及其解决方案的演示
. clear
. set obs 1
number of observations (_N) was 0, now 1
. generate var1 = 1
. generate var2 = 2
. program RR
1. syntax varlist
2. display "parsed list: `varlist'"
3. end
. RR var1 var2
parsed list: var1 var2
. RR var3
variable var3 not found
r(111);
. RR var1/var2
/ invalid name
r(198);
. program SS
1. syntax anything
2. display "parsed list: `anything'"
3. end
. SS var1 var2
parsed list: var1 var2
. SS var3
parsed list: var3
. SS var1/var2
parsed list: var1/var2
.
现在可以了。这是最后的代码
program RESULTS_RATIOS
syntax anything
tempname v se
local k : list sizeof anything
display as txt %12s "Variable" ///
as txt %10s "Mean" ///
as txt %12s "SE" ///
as txt %12s "N"
forval i = 1/`k' {
local var : word `i' of `anything'
quietly svy: ratio `var'
quietly estat size
quietly estat effects
matrix `v' = e(V)
scalar `se' = sqrt(el(`v',1,1))
display as txt %12s "`var'" ///
" " as res %9.0g _b[`var'] ///
" " as res %9.0g `se' ///
" " as res %9.0g e(N)
}
end
RESULTS_RATIOS var1/var2 var3/var4
现在可以了。这是最后的代码
program RESULTS_RATIOS
syntax anything
tempname v se
local k : list sizeof anything
display as txt %12s "Variable" ///
as txt %10s "Mean" ///
as txt %12s "SE" ///
as txt %12s "N"
forval i = 1/`k' {
local var : word `i' of `anything'
quietly svy: ratio `var'
quietly estat size
quietly estat effects
matrix `v' = e(V)
scalar `se' = sqrt(el(`v',1,1))
display as txt %12s "`var'" ///
" " as res %9.0g _b[`var'] ///
" " as res %9.0g `se' ///
" " as res %9.0g e(N)
}
end
RESULTS_RATIOS var1/var2 var3/var4
@威廉·利索夫斯基(William Lisowski)用“任何东西”取代了varlist。但是,当您有多组比率时,例如结果比率var1/var2 var3/var4…时,它不起作用。。。。有什么建议吗?那是因为你不能输入例如var1/var2的意思,这反过来又需要一个varlist。您需要动态创建一个变量。我的第一个建议是,您不仅要报告它不起作用,还要报告错误消息是什么。我猜您修改的代码中的ratio comand失败了,因为指定了多个ratio的ratio命令的语法需要在每个ratio周围加上括号。我认为您需要使用类似于SS var1/var2 var3/var4的命令调用您的程序,但是由于我没有使用ratio命令,所以我不确定。查看帮助比率以了解正确的语法。错误是比率规范无效:过多的“/”。。。当我使用SS var1/var2 var3/var4时,它将整行视为一个比率。它通过修改后的代码中的var1/var2生成第一个比率的结果,删除本地k命令,并用本地任意值的foreach var替换forval i和local var命令。有关语法建议,请参阅帮助foreach。如果这无法实现,请编辑您的问题,并在不删除问题当前部分内容的情况下添加新的代码块,以显示您的代码现在的外观。@William Lisowski将varlist替换为anything。但是,当您有多组比率时,例如结果比率var1/var2 var3/var4…时,它不起作用。。。。有什么建议吗?那是因为你不能输入例如var1/var2的意思,这反过来又需要一个varlist。您需要动态创建一个变量。我的第一个建议是,您不仅要报告它不起作用,还要报告错误消息是什么。我猜您修改的代码中的ratio comand失败了,因为指定了多个ratio的ratio命令的语法需要在每个ratio周围加上括号。我认为您需要使用类似于SS var1/var2 var3/var4的命令调用您的程序,但是由于我没有使用ratio命令,所以我不确定。查看帮助比率以了解正确的语法。错误是比率规范无效:过多的“/”。。。当我使用SS var1/var2 var3/var4时,它将整行视为一个比率。它通过修改后的代码中的var1/var2生成第一个比率的结果,删除本地k命令,并用本地任意值的foreach var替换forval i和local var命令。有关语法建议,请参阅帮助foreach。如果这无法实现,请编辑您的问题,并在不删除问题当前部分内容的情况下添加新的代码块,以显示您的代码现在的外观。