Разделить строку на несколько переменных - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть набор данных, который выглядит следующим образом:

Var1
PASSED=50; NOT PASSED=10; GPA=1;

Как я могу создать приведенный ниже набор данных?

Pass     Not_pass      GPA  
  50           10        1

Я использовал следующий код, но он не работал:

generate pass = subinstr(subinstr(word(Var1, 1), "PASSED=", "", .) if regexm(Var1, "PASSED=") == 1
replace pass = pass[_n+1] if pass[_n]=="" & pass[_n+1]!=""

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

У меня работает следующее:

clear
input strL Var1
"PASSED=50; NOT PASSED=10; GPA=1;"
end

split Var1, parse(";") generate(x)

forvalues i = 1 / 3 {
    generate v`i' = real(regexs(1)) if regexm(x`i',"([0-9]+)")
}

drop x*
rename (v1 v2 v3) (Pass Not_Pass GPA)

list 

     +----------------------------------------------------------+
     |                             Var1   Pass   Not_Pass   GPA |
     |----------------------------------------------------------|
  1. | PASSED=50; NOT PASSED=10; GPA=1;     50         10     1 |
     +----------------------------------------------------------+
0 голосов
/ 24 февраля 2020

Использование moss из SS C - это еще один способ сделать это в Stata.

clear
input strL Var1
"PASSED=50; NOT PASSED=10; GPA=1;"
end

ssc install moss 
moss Var1, match("([0-9]+)") regex 

rename (_match?) (Pass Not_Pass GPA)
drop _* 

list 

     +----------------------------------------------------------+
     |                             Var1   Pass   Not_Pass   GPA |
     |----------------------------------------------------------|
  1. | PASSED=50; NOT PASSED=10; GPA=1;     50         10     1 |
     +----------------------------------------------------------+
0 голосов
/ 22 февраля 2020

вы можете научиться разбивать строки в python, используя документацию str . Например,

var1 = "PASSED=50; NOT PASSED=10; GPA=1;"
p, np, gpa, _ = var1.split(";")

Это может фактически оставить некоторый пробел

print(np)
>>> ' NOT PASSED=10'

, который можно исправить с помощью strip

print(np.strip())
>>> 'NOT PASSED=10'

Тогда вы Можно настроить словарь для хранения всех ваших данных

d = {x.strip().split("=")[0]:x.split("=")[1] for x in [p, np, gpa]}
print(d)
>>> {'PASSED': '50', 'NOT PASSED': '10', 'GPA': '1'}
...