删除 Stata 中长字符串的重复字符(左截断)

Dropping repeat characters of a long string in Stata (left-truncation)

提问人:mkd845 提问时间:11/17/2023 更新时间:11/17/2023 访问量:4

问:

我有一个数据集,曾经是 ~8000 行的长 80 个字符的字符串变量。我拆分了字符串,以便现在每一行都是字符串的一个字符,其中 caseid 标识单个字符(当字符串仍然在一起时,它曾经是一行),method 是字符串拆分的变量的名称。下面是我分隔字符串之前的样子的示例:“111000033333333333333333333333333NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN我需要删除字符串末尾的所有字符,这些字符对每个案例 ID 重复。在此示例中,我将删除重复案例 ID 1 10 1 的 N 的第 36-67 行。可以删除的字符有 1、2、3、5、6、7、8、9、C、E、L、M、N、S、W。但是,我会为每个人删除的字符数(即行数)各不相同,因为一个人可能只有 3 个重复的字符,例如,另一个人可能有 20 个,而其他人的整个字符串是相同的字符,因此我会删除个人/所有行。从本质上讲,我正在尝试左截断我的数据。我想为这些删除的字符创建一个名为 dropped_characters 的新变量,以查看删除了哪些行/字符。当字符串仍然在一起时(即,在我将其分成不同的行之前),我尝试这样做,但它不起作用。所以现在我正在尝试用已经拆分的字符串来做这件事。我已经尝试了以下代码的各种版本,但我不断收到语法错误,它正确地创建了dropped_characters

  • 创建一个新变量来标识要删除的字符 第 dropped_characters 代 = “”

  • 根据 caseid 识别组 egen group_id = 组(大小写)

  • 遍历每个组 group_id级别,本地(组) foreach 组在 'groups' {

    • 遍历每个字符以识别并删除不必要的字符 forval i = 1/i', 1) if inlist(“char'”, if group_id == char'“, ”“, group' } } }max_rows' { local char : substr(method, char'", "1", "2", "3", "5", "6", "7", "8", "9", "C", "E", "L", "M", "N", "S", "W") { * Append to the variable indicating dropped characters replace dropped_characters = dropped_characters + "group' * Set the character to missing replace method = subinstr(method, "i') if group_id ==
  • 删除空行 如果缺少,则丢弃(方法)

  • 显示每个案例 ID 的删除字符 将大小写字母 dropped_characters GEN(dropped_char_summary) 制成表格

  • 保存已清理的数据集 保存 cleaned_data.dta, 将

我尝试了上面的代码以及 Stata 作为错误返回的 substr

字符串 截断

评论


答: 暂无答案