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,"  "), .)," ", "", .)