字符串变量包含多个条目,条目数因观察而异。我可以将其转换为字节并对条目数求和吗?

String variable contains multiple entries, number of entries differs by observations. Can I turn it into byte and sum the number of entries?

我有一个特定群体中个人的数据集。每个都有一个唯一的数字 ID。我们要求每个人给出他们在群里的朋友的ID。

问题是任何个人的朋友的 ID 都被编码在一个字符串中。

这是一个例子:

input int user_id strL coop_friends_list_1
79 "81, 80, 93, 92, 87, 94, 89, 88, 83, 84, 97"
80 "82, 83, 89, 88, 93, 92, 87, 81, 97, 84"    
81 "82, 89, 93, 92, 87, 88, 79, 84, 80, 97, 83"
82 "80, 81, 87, 92, 93, 97"                    
83 "92, 80, 87, 81"                            
84 "92, 97, 82, 87, 88, 93, 89, 80, 79, 83"    
85 "95, 98, 94, 91, 86, 90, 96"                
86 "94, 96, 85, 91, 98, 95, 90"                
87 "83, 81, 92, 88, 89, 93, 82, 80, 79, 84, 94"
88 "80, 81, 84, 87, 89, 92, 93, 94"            

因此对于第一行,#79 人将#81、80、93、92、87、94、89、88、83、84 和 97 作为他们的朋友。

我想做的是:

  1. 将字符串转换为数字条目。我可以使用我已经为另一个变量执行的 split, destring 命令来做到这一点。

我的主要问题是每个人的朋友数量不一样,所以它会为每个朋友创建一个变量,但是如果有些人的朋友比另一个人少,他们就会有缺失值。

  1. 我想统计每个人有多少个朋友。我不想要 ID 的总和:我想计算每次观察引用的单个 ID 的数量,并将该值存储在最终变量中。

关于#1,您想要什么不同之处? (全面披露:此处为 split 的推定作者。)

在 #2 上,标识符的数量是逗号的数量加 1。

 gen wanted = 1 + strlen(coop) -  strlen(subinstr(coop, ",", "", .)) 

如果删除逗号,则从减少的长度中计算逗号的数量。

另一种方法是用空格替换逗号并计算字数。如果您的逗号后面始终跟有空格,则字数统计可能会直接起作用。

编辑:wordcount() 在数据示例中运行良好,因为单词被定义为分隔的任何空格(受制于比空格更紧密的引号约束,此处不适用)。如果对逗号后面总是跟有空格有任何疑问,那么将 "," 替换为 ", "" " 将确保正确解析。