2016-09-21 24 views
1

我們正在Stata中使用R創建的數據,這些數據已使用haven包導出。我們偶然發現了一個名稱中帶有點的變量的問題。複製的問題,一些最起碼的R代碼裏面:閱讀天堂在Stata中創建dta文件 - 如何處理變量名稱中的點?

library("haven") 
var.1 <- c(1,2,3) 
var_2 <- c(1,2,3) 
test_df <- employ.data <- data.frame(var.1, var_2) 
str(test_df) 
write_dta(test_df, "D:/test_df.dta") 

現在,在Stata,當我這樣做:

use "D:\test_df.dta" 
d 

第一個問題 - 我得到一個空的數據集。第二個問題 - 我們得到一個點的變量名 - 在Stata中應該是非法的。因此,任何使用命令一樣,直接

drop var.1 

變量名返回一個錯誤:

factor variables and time-series operators not allowed 
r(101); 

是什麼原因造成這樣的行爲?任何解決這個問題的方法?

回答

3

這將drop var.1在Stata:

drop var?1 

這裏(在Excel),?用作單個字符的通配符。 (相當於.的正則表達式)

不幸的是,如果它存在,這也將是drop var_1

在使用haven編寫.dta文件時,我不確定丟失的值。我能夠在Stata 14.1和haven 0.2.0中複製這個結果。 然而,使用從havenread_dta功能,

temp2 <- read_dta("test_df.dta") 

返回data.frame。作爲haven的替代方案,我過去沒有問題地使用過readstata13包。

library(readstata13) 
save.dta13(test_df, "testdf.dta") 

儘管此代碼具有相同的變量名的問題,它規定當讀取到的Stata 14.1含有正確值的.dta文件。 save.dta13有一個convert.underscore參數,用於刪除Stata變量名稱中的無效字符。我驗證了它在此示例中對於版本0.8.5的readstata13會正常工作,但在某些早期版本(包括版本0.8.2)中存在缺陷。

+1

謝謝伊莫。至少在這個特殊的例子中,「滴」技巧確實是一個很好的技巧。也可以確認'readstata13'創建Stata中可讀的數據集。 – radek

相關問題