我想在.dta数据集中保存变量的存储类型(不打开它)。
作为示例,我将首先创建一个数据集 temp.dta
drop _all
set obs 100
gen a = runiform()
save temp, replace
在交互式会话中,我可以使用以下命令显示所有变量的存储类型 describe using
但是,该命令仅保存数据集的维,而没有任何与存储类型有关的信息。
有办法吗?
您可以从以下示例开始:
clear
set more off
sysuse auto
foreach v of varlist _all {
local allt `allt' `v' `: type `v''
}
display "`allt'"
我设置了信息,以便每个变量名后面都跟有类型,但是您可以根据需要进行修改。也许有两个本地变量,一个具有变量名,另一个具有相应的类型最适合您。
关键是扩展宏功能 type varname
。有关help extended_fcn
详细信息,请参见。
为此,需要在某个时候打开数据集。没有后一种要求,我不知道这样做的方法。
@SteveSamuels提出了建议use <somedata> in 1
,我介绍了基准测试:
clear
*----- example data -----
sysuse auto
expand 50000
tempfile myauto
save "`myauto'"
*----- tests -----
clear
timer on 1
describe using "`myauto'"
timer off 1
clear
timer on 2
use "`myauto'" in 1
describe
timer off 2
clear
timer on 3
use "`myauto'"
describe
timer off 3
count
timer list
timer clear
clear
导致
. timer list
1: 0.00 / 1 = 0.0000
2: 0.22 / 1 = 0.2190
3: 0.33 / 1 = 0.3260
因此,比use
预期的简单要快,但describe using ...
仍能赢得比赛。后者必须使用优化的代码,此外use <somedata> in 1
,尽管加载了一个观察结果,但也必须出于某些原因而出乎意料地降低速度。
当然,这不包括循环遍历变量和使用扩展的宏函数,也不分析日志文件。但我认为结果不会有太大改变。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句