问题描述
我有非常奇怪的分隔符的数据:
1,|ABC1|,|BUD|,|Fed Budget & Appropriations|,|t1|
2,|ABC2|,|LBR|,|Labor,Antitrust & Workplace|,|t2|
3,|ABC3|,|UNM|,|Unemployment|,|t1|
所以分隔符是一个逗号和每个变量,但第一个(标识符)在两个管道之间。问题是第四个变量也使用逗号,所以我不能简单地使用逗号作为分隔符并删除管道。我已经找到了一种通过终端执行查找和替换操作来处理数据的方法,但我想通过 Stata 来执行此操作。有人知道怎么做吗?
解决方法
我将您的数据示例放入一个文本文件中,发现分隔符可以很好地自动检测。然后,我使用 Stata Journal 中的 drop
findname
处理所有逗号或丢失的任何变量。
. import delimited "troublesome.txt"
(9 vars,3 obs)
. list
+-------------------------------------------------------------------------+
| v1 v2 v3 v4 v5 v6 v7 v8 v9 |
|-------------------------------------------------------------------------|
1. | 1,ABC1,BUD,Fed Budget & Appropriations,t1 . |
2. | 2,ABC2,LBR,Labor,Antitrust & Workplace,t2 . |
3. | 3,ABC3,UNM,Unemployment,t1 . |
+-------------------------------------------------------------------------+
. findname,all(@ == ",")
v3 v5 v7
. drop `r(varlist)'
. findname,all(missing(@))
v9
. drop `r(varlist)'
. destring v1,ignore(",") replace
v1: character,removed; replaced as byte
. list
+-----------------------------------------------------+
| v1 v2 v4 v6 v8 |
|-----------------------------------------------------|
1. | 1 ABC1 BUD Fed Budget & Appropriations t1 |
2. | 2 ABC2 LBR Labor,Antitrust & Workplace t2 |
3. | 3 ABC3 UNM Unemployment t1 |
+-----------------------------------------------------+