Merge 关于数据合并:SAS中的in=选项

Merge 关于数据合并:SAS中的in=选项,merge,sas,Merge,Sas,我对以下in=步骤的作用有点困惑 代码如下: data data1; merge data2 data3 (in=inb); by ID; if inb; run; 如果有人能告诉我in=inb在这里做什么,我将不胜感激 根据,要合并的数据集可以有选项。在本例中,您正在使用。以下是对该选项的解释: 创建一个布尔变量,该变量指示数据集是否为当前观测提供了数据 因此,在本例中,您要将此布尔变量命名为inb,根据,您要合并的数据集可以有选项。在本例中,您正在使用。以下是对该选项的解释: DS_A

我对以下in=步骤的作用有点困惑

代码如下:

data data1;
merge data2 data3 (in=inb);
by ID;
if inb;
run; 
如果有人能告诉我in=inb在这里做什么,我将不胜感激

根据,要合并的数据集可以有选项。在本例中,您正在使用。以下是对该选项的解释:

创建一个布尔变量,该变量指示数据集是否为当前观测提供了数据

因此,在本例中,您要将此布尔变量命名为
inb

,根据,您要合并的数据集可以有选项。在本例中,您正在使用。以下是对该选项的解释:

DS_A         DS_B

ID VAR1      ID VAR2
A   X        A   X
B   X        B   X
C   X        D   X

data want;
merge ds_a ds_b;
by id;
run;
创建一个布尔变量,该变量指示数据集是否为当前观测提供了数据

因此,在本例中,您将命名这个布尔变量
inb

DS_A         DS_B

ID VAR1      ID VAR2
A   X        A   X
B   X        B   X
C   X        D   X

data want;
merge ds_a ds_b;
by id;
run;
会产生这个

WANT:

ID VAR1 VAR2
A   X    X
B   X    X
C   X  
D        X
如果添加IN=选项,则添加一个临时隐藏变量,该变量在该数据集中存在观测值时为1,否则为0,如下所示:

DS_A         DS_B

ID VAR1      ID VAR2
A   X        A   X
B   X        B   X
C   X        D   X

data want;
merge ds_a (in=frs) ds_b (in=scn);
by id;
run;

WANT:
ID VAR1 VAR2  FRS  SCN
A   X    X     1    1
B   X    X     1    1
C   X          1    0
D        X     0    1
因此,您可以使用此隐藏变量来保留来自一个数据集或来自两个数据集或仅来自一个数据集的观测值等

if frs; ---> keep ID=A B C
if scn; ---> keep ID=A B D
if frs and scn ---> keep ID=A B
if frs and not scn --> keep ID=C
etc..
会产生这个

WANT:

ID VAR1 VAR2
A   X    X
B   X    X
C   X  
D        X
如果添加IN=选项,则添加一个临时隐藏变量,该变量在该数据集中存在观测值时为1,否则为0,如下所示:

DS_A         DS_B

ID VAR1      ID VAR2
A   X        A   X
B   X        B   X
C   X        D   X

data want;
merge ds_a (in=frs) ds_b (in=scn);
by id;
run;

WANT:
ID VAR1 VAR2  FRS  SCN
A   X    X     1    1
B   X    X     1    1
C   X          1    0
D        X     0    1
因此,您可以使用此隐藏变量来保留来自一个数据集或来自两个数据集或仅来自一个数据集的观测值等

if frs; ---> keep ID=A B C
if scn; ---> keep ID=A B D
if frs and scn ---> keep ID=A B
if frs and not scn --> keep ID=C
etc..
因为选项(in=inb)在data3之后,所以它被引用到此数据集。 因此,如果观测值出现在data3中,则data1(最终数据集)中的布尔变量为1,否则为0

Data2 Data3
ID       ID
A        A
B        B
C        D
你会有

Data3
ID INB
A  1
B  1
C  0
D  1
如果为INB,则添加声明;您将只保留INB=1的观测值(来自数据3的观测值)

因为选项(in=inb)在data3之后,所以它被引用到此数据集。 因此,如果观测值出现在data3中,则data1(最终数据集)中的布尔变量为1,否则为0

Data2 Data3
ID       ID
A        A
B        B
C        D
你会有

Data3
ID INB
A  1
B  1
C  0
D  1
如果为INB,则添加声明;您将只保留INB=1的观测值(来自数据3的观测值)

在功能上,

 merge data2 data3 (in=inb);
 by ID;
    if inb;
与SQL中的右连接相同

从技术上讲,“inb”是一个0/1标志,对于在data3中找到的每个记录,都设置为“1”。 “if inb”是“if inb为真[然后保留记录]”的缩写,对于数字字段,“真”表示大于零

在功能上

 merge data2 data3 (in=inb);
 by ID;
    if inb;
与SQL中的右连接相同

从技术上讲,“inb”是一个0/1标志,对于在data3中找到的每个记录,都设置为“1”。
“if inb”是“if inb为真[然后保留记录]”的缩写,对于数字字段,“真”表示大于零

in=选项行为的另一个方面,我想其他人都没有提到过——如果使用相同的
in=
变量合并两个不同的数据集,并且一行在其中一行,而不是另一行,则值1优先于值0。例如

data test;
    merge sashelp.class(where = (sex = 'F') in = a) 
          sashelp.class(where = (sex = 'M') in = a);
    by name;          
    put _all_;
run;    

在这种情况下,每一行a=1,即使每一行只存在于一个输入数据集中。

In=选项行为的另一个方面,我想其他人都没有提到过-如果您使用相同的
In=
变量合并两个不同的数据集,并且一行在一个数据集中,而不是在另一个数据集中,值1优先于值0。例如

data test;
    merge sashelp.class(where = (sex = 'F') in = a) 
          sashelp.class(where = (sex = 'M') in = a);
    by name;          
    put _all_;
run;    

在这种情况下,每行a=1,即使每行仅存在于一个输入数据集中。

非常好和详细的解释非常好和详细的解释