重新标记循环中的变量--无效语法? [英] Relabel variables in a loop--invalid syntax?

查看:28
本文介绍了重新标记循环中的变量--无效语法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个需要重新标记的变量列表。我创建了成对的本地变量和循环来重命名它们,如下所示:

local demo var1                             ///
var2                                        ///     
var3                                        ///
var4                                        ///
var5                                        /// 
var6

local varlabel "label 1"                    ///
"label 2"                                   ///
"label 3"                                   ///
"label 4"                                   /// 
"label 5"                                   ///
"label 6"                                       

    * Count number of variables in local
    local mydemocount: word count `demo'
    
    
    * Loop through all variables
    forval mycounter = 1/`mydemocount' {
        local myvar:     word `mycounter' of `demo'
        local myvarlabel:        word `mycounter' of `varlabel'
        
        label var `myvar' "`myvarlabel'"
        
    }   
但是,我收到了无效语法&Quot;错误。有人能帮我找出这里的问题吗?有没有更干净的方法来做这件事?

推荐答案

要测试此代码,需要包含相关变量的沙箱数据集。否则,主要的错误是需要使用复合双引号。如果没有复合双引号,定义varlabel时最外面的双引号将被去掉,这不是您想要的。

* sandbox 
clear
set obs 1 
forval j = 1/6 { 
    gen var`j' = 42 
} 

* fixed code 
local demo var1 var2 var3 var4 var5 var6
local varlabel `" "label 1"  "label 2" "label 3" "label 4" "label 5" "label 6" "'    

* Count number of variables in local
local mydemocount: word count `demo'
    
* Loop through all variables
forval mycounter = 1/`mydemocount' {
    local myvar: word `mycounter' of `demo'
    local myvarlabel: word `mycounter' of `varlabel'   
    label var `myvar' "`myvarlabel'"
}    
这个例子可能自然是一个更复杂的例子的代表,但即便如此,用一条语句定义每个变量标签也要简单得多。代码将所有变量名放入一个本地,并将所有变量标签放入另一个本地--然后代码必须再次取出它们。这就像是把几只左手套放进一个盒子里,把几只右手套放进另一个盒子里,然后从盒子里拿出来配对。不需要装箱和取消装箱。

循环很好,但如果只拼出单个语句就更容易了,情况就不一样了。

具体地说,这是一种迂回执行6条语句的方法,其中

label var var1 "label 1" 

具有代表性。

另一方面,如果我们从字面上理解这个问题,那可能是一个循环:

forval j = 1/6 { 
    label var var`j' "label `j'" 
} 

但我的猜测是,您并不真的想要这样的名称,就像使用var1这样的名称不是一个好的选择一样,当可以使用令人联想到的名称时。抽象问题有时会掩盖真正的问题。

这篇关于重新标记循环中的变量--无效语法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆