假設我有這兩個資料集:data1和data2. 它們是相同的,除了data1包含make變數 whiledata2不包含。
sysuse auto2, clear
*create first dataset
preserve
tempfile data1
save `data1'
restore
*create second dataset
preserve
drop make
tempfile data2
save `data2'
restore
我的問題很簡單。我只想撰寫代碼,以便在存在某些變數時保留它們,如果不存在則保留更有限的集合。請注意,在我的應用程式中,洗掉變數不是很可行。我需要使用保持。
在我的玩具示例中,我想為擁有它的資料集(即)保留和只price為沒有它的資料集(即)。makedata1pricemakedata2
這不起作用,因為keep如果給定變數不在資料集中,則失敗:
forvalues i=1/2 {
use `data`i'', clear
keep price make
}
有什么建議么?我想知道是否有某種方法可以使用if else陳述句來測驗變數是否make存在,然后執行keep price make或keep price. 或者可能使用某種方式capture keep price make,然后根據是否失敗,轉到keep price. 這些作業或任何其他方法會起作用嗎?
uj5u.com熱心網友回復:
這是一種方法:獲取存在的變數串列,并查找這些變數的交集和所需的變數集。
您的暫定代碼對結果沒有任何影響save。這里我覆寫了剛剛讀入的資料集;您的應用程式可能(確實應該)希望將save其添加到新檔案中。
forvalues i=1/2 {
use `data`i'', clear
unab present : *
local wanted price make
local available : list present & wanted
keep `available'
save, replace
}
參見例如isvarSSC 和特別是capture confirm var.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/478355.html
