0

我正在尝试运行一个循环,在其中计算变量下每个文件中的总数_merge,然后计算 的某些结果_merge,例如_merge=1等等。然后,我想通过将 的每个实例除以 下_merge的总数来计算百分比_merge

下面是我的代码:

/*define local list*/
local ward_names B C D E FN FS GS HE


/*loop for each dbase*/
foreach file of local ward_names  {
use "../../../cleaning/sra/output/`file'_ward_CTS_Merged.dta", clear

count if _merge
local ward_count=r(N)

count if _merge==1
local count_master=r(N)

count if _merge==2
local count_using=r(N)

count if _merge==3
local count_match=r(N)

clear 
set obs 1 

g ward_count='ward_count'
g count_master=`count_master'
g count_using=`count_using'
g count_match=`count_match'
g ward= "`file'"

save "../temp/`file'_collapsed_diagnostics.dta", replace

clear

代码运行良好,直到我尝试添加每个病房文件的总数:

g ward_count='ward_count'
'ward_count' invalid name 

这是语法错误还是更严重的问题?

4

1 回答 1

2

当您引用本地宏时,您需要使用 ` 而不是 ':

generate ward_count = `ward_count'

编辑:

根据@NickCox 的建议,您可以通过使用tabulate带有选项的命令来改进您的代码,matcell()以一次获取所有计数:

tabulate _merge, matcell(A)

                 _merge |      Freq.     Percent        Cum.
------------------------+-----------------------------------
        master only (1) |          1       16.67       16.67
            matched (3) |          5       83.33      100.00
------------------------+-----------------------------------
                  Total |          6      100.00

matrix list A

A[2,1]
    c1
r1   1
r2   5

因此,您可以执行以下操作:

generate count_master = A[1,1]
generate count_match = A[2,1]
于 2018-08-15T01:29:05.147 回答