Stata 删除两个表中的相同观察值

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-

假设我有以下数据:

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