Я бы сделал это исключительно из-за манипуляций со струнами.Если мы объединяем все в одну строку, мы можем посчитать любой символ, который пожелаем, следующим устройством: притворимся, что заменяем каждый экземпляр этого символа ничем (поэтому притворимся, что удалили его), а затем посмотрим, насколько короче строка.Этот трюк был написан в этой статье 2011 года, доступной для всех .
Подсчет звездочек - это еще один пример.
Объединенная комбинация имеет другое применение, особенно если переменные ссылаются на последовательность или историю какого-либо рода.
Здесь я повторяю код, чтобы создать пример данных для удобства всех, кто хочет поиграть с кодом.
clear
input str1(var1 var2 var3 var4 var5 var6 var7 var8 var9 var10)
"+" "+" "+" "+" "+" "+" "+" "+" "+" "+"
"+" "+" "+" "+" "+" "+" "-" "+" "-" "+"
"+" "-" "-" "-" "+" "+" "+" "+" "+" "?"
"+" "+" "+" "+" "+" "+" "-" "-" "-" "-"
"+" "+" "+" "+" "+" "*" "*" "*" "*" "*"
"+" "+" "+" "+" "-" "-" "-" "*" "*" "*"
"+" "*" "+" "+" "+" "+" "+" "+" "+" "+"
"+" "+" "+" "+" "-" "-" "-" "-" "-" "-"
"-" "-" "-" "-" "-" "-" "+" "+" "+" "+"
"+" "+" "+" "+" "+" "+" "+" "+" "+" "+"
end
egen all = concat(var*)
gen plus = 10 - length(subinstr(all, "+", "", .))
gen minus = 10 - length(subinstr(all, "-", "", .))
gen question = 10 - length(subinstr(all, "?", "", .))
list all plus minus question, sep(0)
+--------------------------------------+
| all plus minus question |
|--------------------------------------|
1. | ++++++++++ 10 0 0 |
2. | ++++++-+-+ 8 2 0 |
3. | +---+++++? 6 3 1 |
4. | ++++++---- 6 4 0 |
5. | +++++***** 5 0 0 |
6. | ++++---*** 4 3 0 |
7. | +*++++++++ 9 0 0 |
8. | ++++------ 4 6 0 |
9. | ------++++ 4 6 0 |
10. | ++++++++++ 10 0 0 |
+--------------------------------------+