【问题标题】:Make first observation the variable name [closed]首先观察变量名[关闭]
【发布时间】:2018-10-03 15:28:19
【问题描述】:

我目前有一个包含 37 个变量的数据集。我用import excel 读入了数据,但是作为第一次观察读入的变量名应该是什么。

我想使用循环将第一个观察值移动到变量名。

这是我尝试过的:

foreach var of varlist * {
rename `A' `=`District'[1]'
}

District 应该是第一个变量的名称,但被读取为第一个观察值。

我得到的错误是:

syntax error
    Syntax is
        rename  oldname    newname   [, renumber[(#)] addnumber[(#)] sort ...]
        rename (oldnames) (newnames) [, renumber[(#)] addnumber[(#)] sort ...]
        rename  oldnames              , {upper|lower|proper}

但我不确定如何解决它。

有什么想法吗?

【问题讨论】:

  • 不需要循环。您只需使用import excel 命令的firstrow 选项。
  • 这里有个原则:你不能从尚未定义的local 宏中得到任何东西。

标签: loops variables foreach rename stata


【解决方案1】:

@Pearly Spencer 的评论是最好的解决方案。只需正确执行import

同时,让我们修复你的循环:

你有

foreach var of varlist * {
    rename `A' `=`District'[1]'
}

这里没有(显然)定义本地宏 ADistrict。即使它们被定义,这个循环最多会rename一个变量由相同或另一个变量的第一个值。循环将第二次失败,因为变量已经是renamed。

我猜你想要的更像是

foreach var of varlist * {
    rename `var' `=`var'[1]'
}

后跟

drop in 1 
destring, replace 

如果renames 有效。

修改后的循环是Stata代码

!!! not Stata 
for each variable { 
    use the value in the first observation as the new name 
}

请注意,我们假设第一个观察中的内容是一组不同且合法的 Stata 变量名称。对于在 Stata 之外准备的数据文件,这通常是一个强有力的假设。

此代码对有问题的名称更健壮:

foreach var of varlist * {
    rename `var' `=strtoname(`var'[1])'

}

有关更多信息,请参阅help strtoname()

如果这不是答案,您需要给我们一个数据示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2014-10-08
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多