String 在Stata变量标签的大写字母前插入空格

String 在Stata变量标签的大写字母前插入空格,string,stata,String,Stata,我有一个Stata数据集,它的变量标签被弄乱了,所以标签“Random Uniform variable”被压缩为“RandomUniformVariable”。我可以通过用空格和大写字母替换大写字母来恢复正确的变量标签 我想通过编程来解决这个问题,这主要是出于好奇。我有一个开始,但是扩展函数:string的第1部分是单词,而不是字母。有办法做到这一点吗 clear set obs 2001 generate var = runiform() label variable var "Random

我有一个Stata数据集,它的变量标签被弄乱了,所以标签“Random Uniform variable”被压缩为“RandomUniformVariable”。我可以通过用空格和大写字母替换大写字母来恢复正确的变量标签

我想通过编程来解决这个问题,这主要是出于好奇。我有一个开始,但是扩展函数
:string
的第1部分是单词,而不是字母。有办法做到这一点吗

clear
set obs 2001
generate var = runiform()
label variable var "RandomUniformVariable"

local name : variable label var
local i : strlen local name
display "`i'"
forvalues j = 1/`i' {
    display "`j'"
    local l : piece `j' of "`name'", nobreak
    display "`l'"
}
暴力有效:

clear
set more off

local teststr "RandomUniformVariable"

forvalues i = 1/26 {
    local letter : word `i' of `c(ALPHA)'
    local teststr : subinstr local teststr "`letter'" " `letter'"
}

display trim("`teststr'")

您可以在
local
命令中使用标准的Stata表达式,因此
local l=substr('name','j',1)
将起作用。而且
strlen
对我不起作用,我把它改成了
length
。这两种方法都不能解决你的最终问题,但你现在也许可以走得更远。@WilliamLisowski-
strlen
对我很有用。也许我应该加上我在14号站?罗伯托在下面提供了一个很好的解决方案。他没有在单词中的字母上循环,检查大写字母,然后添加空格,而是在大写字母上循环并添加空格。从来都不知道creturn。非常聪明。谢谢不知道
creturn