Stata 拆分变量以获取最后一个字符串作为新变量
我有一个大型的Stata 拆分变量以获取最后一个字符串作为新变量,stata,Stata,我有一个大型的5000观测数据集,我的数据子集如下所示: AandB 1 222 454 213.51 59.15% 444 630 789.46 6.15% 2 374 798 807.69 32.00% 304 738 263.59 19.95% 177 641 617.86 18.07% 857 937 842.27 51.97% 973 127.33 0.03% 86 205 146.62 1.18% 我需要两个变量,A和B 例如,1222454213.51应列在A列
5000
观测数据集,我的数据子集如下所示:
AandB
1 222 454 213.51 59.15%
444 630 789.46 6.15%
2 374 798 807.69 32.00%
304 738 263.59 19.95%
177 641 617.86 18.07%
857 937 842.27 51.97%
973 127.33 0.03%
86 205 146.62 1.18%
我需要两个变量,A
和B
例如,1222454213.51
应列在A
列中,变量B
中的相应观察值应列在59.15%
在原始数据中,a
中需要的值和B中需要的值之间有一个双空格
因此,我需要:
A B
1222454213.51 59.15%
444630789.46 6.15%
2374798807.69 32.00%
304738263.59 19.95%
177641617.86 18.07%
857937842.27 51.97%
973127.33 0.03%
86205146.62 1.18%
我能够通过以下方法获得变量A
:
generate A = reverse(substr(reverse(AandB),strpos(reverse(AandB), " "), . ))
replace A = subinstr(A, " ", "", .)
generate A = subinstr(substr(AandB, 1, strpos(AandB," "))," ", "", .)
generate B = subinstr(substr(AandB, strpos(AandB," "), .)," ", "", .)
但是,我在提取百分比时遇到问题。一种方法是:
split AandB, p(" ")
rename AandB1 A
rename AandB2 B
replace A = subinstr(A, " ", "", .)
list, separator(0)
+---------------------------------------------------+
| AandB A B |
|---------------------------------------------------|
1. | 1 222 454 213.51 59.15% 1222454213.51 59.15% |
2. | 444 630 789.46 6.15% 444630789.46 6.15% |
3. | 2 374 798 807.69 32.00% 2374798807.69 32.00% |
4. | 304 738 263.59 19.95% 304738263.59 19.95% |
5. | 177 641 617.86 18.07% 177641617.86 18.07% |
6. | 857 937 842.27 51.97% 857937842.27 51.97% |
7. | 973 127.33 0.03% 973127.33 0.03% |
8. | 86 205 146.62 1.18% 86205146.62 1.18% |
+---------------------------------------------------+
一种方法是:
split AandB, p(" ")
rename AandB1 A
rename AandB2 B
replace A = subinstr(A, " ", "", .)
list, separator(0)
+---------------------------------------------------+
| AandB A B |
|---------------------------------------------------|
1. | 1 222 454 213.51 59.15% 1222454213.51 59.15% |
2. | 444 630 789.46 6.15% 444630789.46 6.15% |
3. | 2 374 798 807.69 32.00% 2374798807.69 32.00% |
4. | 304 738 263.59 19.95% 304738263.59 19.95% |
5. | 177 641 617.86 18.07% 177641617.86 18.07% |
6. | 857 937 842.27 51.97% 857937842.27 51.97% |
7. | 973 127.33 0.03% 973127.33 0.03% |
8. | 86 205 146.62 1.18% 86205146.62 1.18% |
+---------------------------------------------------+
另一种前进的方式是首先剥离最后一个“单词”(Stata sense):
如果您确实希望A
被视为指定了一些非常大的数字,那么
generate double A2 = real(subinstr(A, " ", "", .))
这是前进的一个方向。测量到12个有效数字意味着你在天文学(也许前6个数字是好的)或经济学(也许第一个数字是可靠的) 另一种前进的方式是先去掉最后一个“单词”(Stata sense):
如果您确实希望A
被视为指定了一些非常大的数字,那么
generate double A2 = real(subinstr(A, " ", "", .))
这是前进的一个方向。测量到12个有效数字意味着你在天文学(也许前6个数字是好的)或经济学(也许第一个数字是可靠的) 以下内容对我有用:
clear
input str50 AandB
"1 222 454 213.51 59.15%"
"444 630 789.46 6.15%"
"2 374 798 807.69 32.00%"
"304 738 263.59 19.95%"
"177 641 617.86 18.07%"
"857 937 842.27 51.97%"
"973 127.33 0.03%"
"86 205 146.62 1.18%"
end
generate A = subinstr(substr(AandB, 1, strpos(AandB,"%")-6)," ", "", .)
generate B = subinstr(substr(AandB, strpos(AandB,"%")-6, .)," ", "", .)
list, separator(0)
+---------------------------------------------------+
| AandB A B |
|---------------------------------------------------|
1. | 1 222 454 213.51 59.15% 1222454213.51 59.15% |
2. | 444 630 789.46 6.15% 444630789.46 6.15% |
3. | 2 374 798 807.69 32.00% 2374798807.69 32.00% |
4. | 304 738 263.59 19.95% 304738263.59 19.95% |
5. | 177 641 617.86 18.07% 177641617.86 18.07% |
6. | 857 937 842.27 51.97% 857937842.27 51.97% |
7. | 973 127.33 0.03% 973127.33 0.03% |
8. | 86 205 146.62 1.18% 86205146.62 1.18% |
+---------------------------------------------------+
编辑:
再想一想,这可以简化为以下内容:
generate A = reverse(substr(reverse(AandB),strpos(reverse(AandB), " "), . ))
replace A = subinstr(A, " ", "", .)
generate A = subinstr(substr(AandB, 1, strpos(AandB," "))," ", "", .)
generate B = subinstr(substr(AandB, strpos(AandB," "), .)," ", "", .)
以下是我的作品:
clear
input str50 AandB
"1 222 454 213.51 59.15%"
"444 630 789.46 6.15%"
"2 374 798 807.69 32.00%"
"304 738 263.59 19.95%"
"177 641 617.86 18.07%"
"857 937 842.27 51.97%"
"973 127.33 0.03%"
"86 205 146.62 1.18%"
end
generate A = subinstr(substr(AandB, 1, strpos(AandB,"%")-6)," ", "", .)
generate B = subinstr(substr(AandB, strpos(AandB,"%")-6, .)," ", "", .)
list, separator(0)
+---------------------------------------------------+
| AandB A B |
|---------------------------------------------------|
1. | 1 222 454 213.51 59.15% 1222454213.51 59.15% |
2. | 444 630 789.46 6.15% 444630789.46 6.15% |
3. | 2 374 798 807.69 32.00% 2374798807.69 32.00% |
4. | 304 738 263.59 19.95% 304738263.59 19.95% |
5. | 177 641 617.86 18.07% 177641617.86 18.07% |
6. | 857 937 842.27 51.97% 857937842.27 51.97% |
7. | 973 127.33 0.03% 973127.33 0.03% |
8. | 86 205 146.62 1.18% 86205146.62 1.18% |
+---------------------------------------------------+
编辑:
再想一想,这可以简化为以下内容:
generate A = reverse(substr(reverse(AandB),strpos(reverse(AandB), " "), . ))
replace A = subinstr(A, " ", "", .)
generate A = subinstr(substr(AandB, 1, strpos(AandB," "))," ", "", .)
generate B = subinstr(substr(AandB, strpos(AandB," "), .)," ", "", .)