我有一个变量,看起来像这个“88.0 *”或“79.5”,其中星号是某物的标志。为了提取这个标志我跑为什么Stata将布尔值存储为float?
gen newvar = regexm(oldvar,"\*$")
这工作正常,但我的新变量是一个浮动,这似乎效率低下。
Stata以字节格式提供存储,为什么regexm
命令(表示0/1是否找到匹配项)默认为?对于这个问题,为什么generate
(以上简称gen
)默认压缩右边,或者至少作为一个选项?
我有一个变量,看起来像这个“88.0 *”或“79.5”,其中星号是某物的标志。为了提取这个标志我跑为什么Stata将布尔值存储为float?
gen newvar = regexm(oldvar,"\*$")
这工作正常,但我的新变量是一个浮动,这似乎效率低下。
Stata以字节格式提供存储,为什么regexm
命令(表示0/1是否找到匹配项)默认为?对于这个问题,为什么generate
(以上简称gen
)默认压缩右边,或者至少作为一个选项?
您可以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
以减少数据使用的内存。
非常好,谢谢!之后我一直计划运行'compress',但你的回答正是我所期待的。 – Frank 2014-09-10 20:12:48
但是,真的,如果'gen'必须将右手表达式转换为'type'(这里是'byte'),那么效率确实很低。理想情况下,'regexm'应该简单地生成正确类型的输出,以......开头......如果您在问题标题中有“为什么”的答案,那很酷。 – Frank 2014-09-10 20:16:46
这似乎是语言设计的一个元素。在'help data_types'中,我们读取:“数字存储为字节,int,long,float或double,默认值为float。”有些人实际上希望将默认设置为_double_,所以这是所有相对的,我猜。更有经验的用户可以说更多。请记住阅读相关的手册条目,这些条目几乎总是提供更多信息。 – 2014-09-10 20:22:32
float是数值变量的默认存储类型;如果你想要布尔值,选择字节。 – 2014-09-10 20:15:33