2014-09-10 109 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

相关问题