楼主: 老朽非老朽
18521 14

[面板数据求助] 关于stata删除含有特定字符整行的问题 [推广有奖]

11
Zzstarbiubiu 发表于 2019-10-17 21:29:40
空谷中的卫小庄 发表于 2019-7-18 13:09
您这样有意思吗?人家就是问一个简单的操作问题,已经表述得很清楚了。你知道就回答,不知道不回复就行了 ...
你太不礼貌

12
卢永泉 学生认证  发表于 2019-11-19 22:22:04
空谷中的卫小庄 发表于 2019-7-18 13:09
您这样有意思吗?人家就是问一个简单的操作问题,已经表述得很清楚了。你知道就回答,不知道不回复就行了 ...
黄老师人超级好,这样规范也是潮流,希望坛友能理解黄老师的良苦用心

13
sungmoo 发表于 2019-11-20 13:04:29
u Name Code queshi using uk, clear
g x=substr(Code, 1, strpos(Code, "(")-1)
bys x: egen y=max(queshi==x)
drop if y

14
来年我还在 学生认证  发表于 2022-2-20 00:13:07
Stakiny 发表于 2019-7-18 13:25
你的揣测不敢苟同。
1.规范的提问,可以提高应助与交流的效率,而现在许多网友的提问并不合理,需要积极 ...
不愿答就别答呗,搞的形式主义

15
赵安豆 发表于 2024-11-4 17:10:56
在Stata中,你可以使用`egen`命令结合`strmatch()`函数来识别含有特定字符串的观测值,并基于此进行删除操作。以下是一个示例步骤:

1. 首先加载你的数据。

```stata
use yourdatafile.dta, clear
```

2. 使用`egen`命令创建一个新变量,该变量用于标识需要删除的行。这里假设你想要检查的是`Code`列是否包含`queshi`列中的字符:

```stata
egen str_match = anymatch(Code, queshi), str(10)
replace str_match = (str_match == "")
```

在这个示例中,`anymatch()`函数将返回一个字符串列表,其中包含了在`Code`变量中匹配到的`queshi`中的字符。然而,我们想要的是一个二元标识(即,行是否需要被删除)。因此,我们使用`replace`命令来更新这个新创建的`str_match`变量:如果`str_match`是一个空字符串(意味着没有找到匹配),则该值被设定为0;否则,默认情况下保持为1。

3. 接下来,基于`str_match`变量的结果,删除需要去除的行:

```stata
drop if str_match == 1
```

请注意,如果你的`queshi`列包含多个字符串,而你想要检查`Code`是否包含了这些字符串中的任何一个,则可能需要稍微调整上述代码。例如,你可以使用`strlist()`函数来创建一个字符串列表,并且在`anymatch()`中应用这个列表。

下面是一个更为详细的示例:

```stata
use yourdatafile.dta, clear

* 假设 queshi 包含多个字符需要匹配,则先将它们转换成列表
local string_list : subinstr local _b "" " " , all

egen str_match = anymatch(Code', "string_list'")
replace str_match = (str_match == "")

drop if str_match == 1
```

在上述代码中,`subinstr`函数用于移除字符串列表中的空格,并将其转换为一个Stata本地宏(local macro),以便于后续使用。然后通过`anymatch()`与该列表进行匹配操作。

请确保将`yourdatafile.dta`替换为你的实际文件名,并根据需要调整变量名称和具体条件,以符合你数据集的实际情况。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 17:28