Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在sas中获取到表1后,从表2中删除记录_Mysql_Sql_Sql Server_Sas - Fatal编程技术网

Mysql 在sas中获取到表1后,从表2中删除记录

Mysql 在sas中获取到表1后,从表2中删除记录,mysql,sql,sql-server,sas,Mysql,Sql,Sql Server,Sas,我有两张桌子: 表1: 键p1调用 1A1 ABC 5 2A2 DEF 4 3A3 GHI 3 3A3 JKL 3 4A4 MNO 2 4A4 PQR 2 4A4 STU 2 表2: Key p2 calls 1A1 DEF 5 3A3 JKL 3 4A4 PQR 2 4A4 STU 2 我的输出表应该是: key p1 calls p2 1A1 ABC 5 DEF 2A2 DEF 4 . 3A3 GHI 3 JKL 3A3 JKL 3 . 4A4 MNO

我有两张桌子:

表1:

键p1调用

1A1 ABC 5
2A2 DEF 4
3A3 GHI 3
3A3 JKL 3
4A4 MNO 2
4A4 PQR 2
4A4 STU 2
表2:

Key p2  calls
1A1 DEF 5
3A3 JKL 3
4A4 PQR 2
4A4 STU 2
我的输出表应该是:

key p1  calls p2
1A1 ABC 5     DEF
2A2 DEF 4     .
3A3 GHI 3     JKL
3A3 JKL 3     .
4A4 MNO 2     PQR
4A4 PQR 2     STU
i、 例如,表2中的记录应该与表1中的第一个匹配项合并,并且没有其他记录。 类似于一旦表2中的3A3 JKL 3与表1中的3A3 GHI 3合并,记录应该从表2中删除

注:圆点。标记缺少的值

有人能推荐一种使用sql或sas的方法吗

提前感谢

试试这个。使用left join获取结果,使用Isnull将缺少的值替换为点


这里有一个SAS的方法,我想你是在问什么。基本上,这是一个简单的合并,经过调整,P2被设置为missing,其中table1中的键不是该特定值的第一次出现。如果您的数据未排序,则需要先进行排序

data table1;
input key $ p1 $ calls;
datalines;
1A1 ABC 5
2A2 DEF 4
3A3 GHI 3
3A3 JKL 3
;
run;

data table2;
input key $ p2 $ calls;
datalines;
1A1 DEF 5
3A3 JKL 3
;
run;

data want;
merge table1 (in=a) table2 (in=b);
by key;
if not first.key then call missing(p2);
if a;
run;

我迷路了!你的问题很难理解。您能重新格式化您的问题吗?如果这是在SAS中,为什么要用各种sql标记?如果是SAS sql和mysql/ms sql server,则使用and和。此外,当您说“已从中删除”时,您的意思是要修改表2吗?或者你只是想让JKL匹配3A3的第一个实例,而不是第二个。Joe-我需要的是JKL匹配3A3的第一个实例,而不是第二个。Mike-我需要的是表2中的任何一行都应该匹配表1中第一个已经不匹配的事件,并且表1中没有其他行。示例:表2中的“PQR”与表1中的“MNO”匹配,在表2中的“STU”之后,应与表1中的“PQR”匹配,而不是表1中的“MNO”。我希望这有助于你理解这个问题。谢谢你的回答。但我需要的是不要把“.”放在遗漏的地方。这是自动处理的。我需要的是,数据表2中的任何一行都应该与表1中的第一行匹配,而不是与表1中的其他行匹配。Keith-感谢您的回复。我需要的是,表2中的任何一行都应该与表1中的第一行匹配,而不是与表1中的其他行匹配。此外,如果表1中的行在表2中已经有匹配项,则不再匹配该行。希望这能详细解释这个问题。这就是我的想法,我相信我的代码就是这么做的?尽管我注意到你已经更新了你的示例数据,现在你有了一个多对多的合并,这与你原来的帖子有点不同。Yes keith。这是一个多对多的合并,在我首先发布的示例中,我忘了提到这一点。我会运行你发布的代码并返回给你。嘿,基思,我检查了你发布的代码。在大多数情况下,它就像一个符咒,但对于一个特定的键,它有一个问题。表1:p1键调用5A5 ABC 2 5A5 DEF 2 5A5 GHI 2 5A5 JKL 2表1:p2键调用5A5 ABC 2 5A5 DEF 2 5A5 GHI 2 5A5 JKL 2在这种情况下,最终输出中不存在记录。匹配条件包括调用匹配,p1和p2不匹配。你能帮忙吗?
data table1;
input key $ p1 $ calls;
datalines;
1A1 ABC 5
2A2 DEF 4
3A3 GHI 3
3A3 JKL 3
;
run;

data table2;
input key $ p2 $ calls;
datalines;
1A1 DEF 5
3A3 JKL 3
;
run;

data want;
merge table1 (in=a) table2 (in=b);
by key;
if not first.key then call missing(p2);
if a;
run;