Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在stata中生成svy比率的程序_Stata - Fatal编程技术网

在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。如果这无法实现,请编辑您的问题,并在不删除问题当前部分内容的情况下添加新的代码块,以显示您的代码现在的外观。