在宏中保存.dta数据集中变量的存储类型(不打开它)

时间:2015-05-22 16:12:50

标签: stata

我想在宏中保存.dta数据集中变量的存储类型(不打开它)。

作为示例,我将首先创建一个数据集temp.dta

drop _all  
set obs 100
gen a = runiform()
save temp, replace

在交互式会话中,我可以使用命令describe using

显示所有变量的存储类型

enter image description here 但是,该命令仅保存数据集的维度,而不包含与存储类型相关的任何信息。

enter image description here

有办法吗?

1 个答案:

答案 0 :(得分:1)

您可以从这个例子开始:

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必须有一些原因意外地缓慢,尽管只加载一个观察。

当然,这不包括循环变量和使用扩展宏函数,也不包括解析日志文件;但我认为结果不会被修改过多。

相关问题