2014-09-10 37 views
0

我有一個變量,看起來像這個「88.0 *」或「79.5」,其中星號是某物的標誌。爲了提取這個標誌我跑爲什麼Stata將布爾值存儲爲float?

gen newvar = regexm(oldvar,"\*$") 

這工作正常,但我的新變量是一個浮動,這似乎效率低下。

Stata以字節格式提供存儲,爲什麼regexm命令(表示0/1是否找到匹配項)默認爲?對於這個問題,爲什麼generate(以上簡稱gen)默認壓縮右邊,或者至少作爲一個選項?

+1

float是數值變量的默認存儲類型;如果你想要布爾值,選擇字節。 – 2014-09-10 20:15:33

回答

2

您可以gen後指定的存儲類型:

clear 
set more off 

input /// 
str5(var1 var2) 
"88.0*" "79.5 " 
end 

list 

gen byte newvar = regexm(var1,"\*$") 

list 

describe 

注意,塔塔沒有布爾類型。 0是假的,1是真的。爲generate的語法(從help generate):

generate [type] newvar[:lblname] =exp [if] [in] 

類型出現括號之間,這意味着它是一個選項。 另請參閱help compress以減少數據使用的內存。

+0

非常好,謝謝!之後我一直計劃運行'compress',但你的回答正是我所期待的。 – Frank 2014-09-10 20:12:48

+0

但是,真的,如果'gen'必須將右手錶達式轉換爲'type'(這裏是'byte'),那麼效率確實很低。理想情況下,'regexm'應該簡單地生成正確類型的輸出,以......開頭......如果您在問題標題中有「爲什麼」的答案,那很酷。 – Frank 2014-09-10 20:16:46

+3

這似乎是語言設計的一個元素。在'help data_types'中,我們讀取:「數字存儲爲字節,int,long,float或double,默認值爲float。」有些人實際上希望將默認設置爲_double_,所以這是所有相對的,我猜。更有經驗的用戶可以說更多。請記住閱讀相關的手冊條目,這些條目幾乎總是提供更多信息。 – 2014-09-10 20:22:32

相關問題