Stata 删除两个表中的相同观察值
假设我有以下数据: 表1我的主数据集:Stata 删除两个表中的相同观察值,stata,Stata,假设我有以下数据: 表1我的主数据集: clear input str1 Name str9 (Day Time) A 24-Mar-08 "10:30:01" A 24-Mar-08 "10:30:01" B 24-Mar-08 "10:30:01" B 24-Mar-08 "11:03:12" B 24-Mar-08 "11:03:12" C 25-
clear
input str1 Name str9 (Day Time)
A 24-Mar-08 "10:30:01"
A 24-Mar-08 "10:30:01"
B 24-Mar-08 "10:30:01"
B 24-Mar-08 "11:03:12"
B 24-Mar-08 "11:03:12"
C 25-Mar-08 "10:30:01"
D 25-Mar-08 "10:30:01"
D 25-Mar-08 "11:13:59"
E 25-Mar-08 "11:13:59"
F 25-Mar-08 "11:13:59"
F 25-Mar-08 "11:13:59"
F 25-Mar-08 "11:59:01"
end
表2:
clear
input str1 Insrument str9 (Day Time) float price
A 30-Mar-10 "09:29:34" 10
E 03-Mar-09 "08:23:19" 14
E 20-Mar-12 "12:15:11" 29
F 01-Mar-11 "10:30:01" 12
end
我想从表1中删除基于name变量的重复观察。我在Stata中打开表1,需要向Stata介绍表2,然后从表1中删除两个表中具有相同名称的相同观测值
最后,结果是:
+------+------------+----------+
| name | date | time |
+------+------------+----------+
| B | 24-Mar-08 | 10:30:01 |
| B | 24-Mar-08 | 11:03:12 |
| B | 24-Mar-08 | 11:03:12 |
| C | 25-Mar-08 | 10:30:01 |
| D | 25-Mar-08 | 10:30:01 |
| D | 25-Mar-08 | 11:13:59 |
+------+------------+----------+
SAS中的SQL代码为:
proc SQL;
create table table3 as
select * from table1
where name not in (select Instrument from table2);
quit;
如何使用Stata使用此程序?最简单的方法是对名称进行合并,并仅保留不匹配的名称:
clear
input str1 Name str9 (Day Time)
A 24-Mar-08 "10:30:01"
E 24-Mar-08 "10:30:01"
E 24-Mar-08 "10:30:01"
F 24-Mar-08 "11:03:12"
end
keep Name
duplicates drop
tempfile names
save "`names'"
clear
input str1 Name str9 (Day Time)
A 24-Mar-08 "10:30:01"
A 24-Mar-08 "10:30:01"
B 24-Mar-08 "10:30:01"
B 24-Mar-08 "11:03:12"
B 24-Mar-08 "11:03:12"
C 25-Mar-08 "10:30:01"
D 25-Mar-08 "10:30:01"
D 25-Mar-08 "11:13:59"
E 25-Mar-08 "11:13:59"
F 25-Mar-08 "11:13:59"
F 25-Mar-08 "11:13:59"
F 25-Mar-08 "11:59:01"
end
merge m:1 Name using "`names'", keep(master) nogen
list, clean noobs
这将产生:
Name Day Time
B 24-Mar-08 10:30:01
B 24-Mar-08 11:03:12
B 24-Mar-08 11:03:12
C 25-Mar-08 10:30:01
D 25-Mar-08 10:30:01
D 25-Mar-08 11:13:59
如果表2和表1中的变量不相同,例如,表2有其他变量,如“价格”,那么答案是什么?虽然没有必要将价格变量添加到表1中,但我并不真正理解您的问题。你能用这个例子修改你的例子吗?我正在处理表1,有必要将表2添加到Stata中,这意味着我的主数据集是表1。对于变量之间的差异,请考虑表2中的变量“名称”是“仪器”。您可以将保留语句修改为包含其他变量,但如果需要根据名称改变,则需要添加一些逻辑来保持哪些观察值。如果添加这些其他变量,它们将与表1合并。您还可以将名称和日期合并在一起。不要尝试m:m合并;这很少是您想要的;将表3创建为“从表1中选择*”,其中名称不在“从表2中选择仪器”中;退出
// Keeping equities
rename name Instrument
merge m:1 Instrument using "file name path"
keep if _merge == 3
keep Instrument Day Time