2016-03-20 68 views
1

我在數據集中做了一些手動更正,我想避免重複if條件。例如,而不是如何在一行中使用Stata替換多個變量

sysuse auto, clear 
replace mpg=21 if make=="AMC Concord" 
replace rep78=4 if make=="AMC Concord" 
replace mpg=23 if make=="AMC Pacer" 
replace rep78=4.5 if make=="AMC Pacer" 

下面的代碼會更簡潔,但它不工作

sysuse auto, clear 
replace mpg=21 & rep78=4 if make=="AMC Concord" 
replace mpg=23 & rep78=5 if make=="AMC Pacer" 

任何建議將是有益的。

回答

1

你是對的;該代碼將更加簡潔。它只是不合法的Stata,並且replace的語法圖中沒有任何其他說明。

我可以想象一些使用if重寫相同代碼的方法,但使用if,但在我看來,沒有一個會更具吸引力或更容易理解。

查找觀察編號並使用in而不是if也會縮短代碼,但對sort順序的更改不太清晰並且非常脆弱。

+0

謝謝。正確使用'in'而不是'if'並不是一個好的解決方案。擴大「替換」的可能性將是一個可能的改進! – emeryville

+0

你可以建議。我認爲它不會與StataCorp或有經驗的用戶一起飛行。爲自己辯解,我會反駁它。「更換」顯然會改變數據並使語法更復雜,可能會有很多缺點。你總是可以編寫自己的程序來接受多個「替換」調用(畢竟這是程序員的論壇)。 –

+0

我們可以用R代替它,然後將數據框重新輸入到Stata? –