Stata:导入带有多个多字符分隔符的 txt

问题描述

我有非常奇怪的分隔符的数据:

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 |
     +-----------------------------------------------------+