2012-12-20 47 views
4

我必須執行一些配對t檢驗,並且我想知道如何自動執行整個過程。 假設我只有下列變量:根據它們的前綴循環變量名稱

int_ma est_ma tot_ma int_pa est_pa tot_pa 

我需要的是計算:

ttest int_ma=int_pa 
ttest est_ma=est_pa 
ttest tot_ma=tot_pa 

當然,在某種程度上它應該能夠利用每一對都有一個唯一的前綴事實和「_pa,_ma」後綴,但不幸的是,我找不到一個簡單的方法來引用每個變量名稱的一部分。

非常感謝您的幫助!

回答

4

有幾種方法可以做到這一點。我將使用帶有一個通用列表的foreach循環。在這裏,我循環使用三個前綴,Stata將其作爲本地宏傳遞給循環,並將_ma_pa附加到generatettest的變量。

* generate some data 
clear 
set obs 100 
foreach x in int est tot { 
    foreach y in ma pa { 
     generate `x'_`y' = runiform() 
    } 
} 

* -ttest- in -foreach- loop 
foreach x in int est tot { 
    ttest `x'_pa = `x'_ma 
} 

foreach幫助文件是一個價值數百讀,因爲是macro幫助文件。這個語法起初有點奇怪(更像是bash腳本比R或Matlab),但它非常靈活。

+0

非常感謝! – Stezzo

+2

有關'foreach'的教程可以在_Stata Journal_ 2(2):202-222(2002)中找到。在Stata中輸入'search foreach'可導致可點擊鏈接到.pdf版本。 (還要注意,這裏的標籤「局部變量」是Stata中的一個solecism,但我沒有足夠的信譽來引入更適合的新標籤「local-macros」。) –

+0

我經常使用'foreach x of var '符號。 「unab」也可能有幫助。 – Keith