合并 SAS 数据集 - 只有 1 个变量
Merging SAS Datasets - Only 1 Variable
场景:我需要将两个 SAS 数据集合并为一个并保留任何不匹配的值。
DatasetA包含:CustomerID、HouseholdID、EmailAddress等。
数据集 B 包含:HouseholdID
DatasetA:
CustomerID HouseholdID EmailAddress ...
1001 100001 joe@aol.com
1002 100002 john@gmail.com
2003 100003 sally@comcast.net
DatasetB:
HouseholdID
100003
100001
我想将这两个合并在一起,但很明显,如果我按原样这样做,我将失去对 DatasetB 的跟踪。
扩展一下,DatasetA 包含所有客户信息,DatasetB 仅包含某些 HouseholdID(不是全部)。我想通过合并创建一个看起来像这样的 table。所以,我想我需要在 DatasetB 中复制 HouseholdID,但我该怎么做呢?
Desired Output (DatasetC)
CustomerID HouseholdID EmailAddress ... DatasetBHouseholdID
1001 100001 joe@aol.com 100001
1002 100002 john@gmail.com .
2003 100003 sally@comcast.net 100003
...
我试过这样做:
data data.datasetc;
merge data.dataseta data.datasetb (RENAME=(householdID=datasetbhouseholdID));
by householdid;
run;
但这当然会导致错误(BY 变量 householdID 不在输入数据集 data.datasetb 上)。
我认为最好的做法是让 DatasetB 看起来像这样:
DatasetB:
HouseholdID DatasetBHouseholdID
100003 100003
100001 100001
但是我该怎么做呢?
使用 IN=
数据集选项。
data data.datasetc;
merge data.dataseta data.datasetb (in=inB);
by householdid;
if inB then datasetbhouseholdID=householdID;
run;
场景:我需要将两个 SAS 数据集合并为一个并保留任何不匹配的值。
DatasetA包含:CustomerID、HouseholdID、EmailAddress等。 数据集 B 包含:HouseholdID
DatasetA:
CustomerID HouseholdID EmailAddress ...
1001 100001 joe@aol.com
1002 100002 john@gmail.com
2003 100003 sally@comcast.net
DatasetB:
HouseholdID
100003
100001
我想将这两个合并在一起,但很明显,如果我按原样这样做,我将失去对 DatasetB 的跟踪。
扩展一下,DatasetA 包含所有客户信息,DatasetB 仅包含某些 HouseholdID(不是全部)。我想通过合并创建一个看起来像这样的 table。所以,我想我需要在 DatasetB 中复制 HouseholdID,但我该怎么做呢?
Desired Output (DatasetC)
CustomerID HouseholdID EmailAddress ... DatasetBHouseholdID
1001 100001 joe@aol.com 100001
1002 100002 john@gmail.com .
2003 100003 sally@comcast.net 100003
...
我试过这样做:
data data.datasetc;
merge data.dataseta data.datasetb (RENAME=(householdID=datasetbhouseholdID));
by householdid;
run;
但这当然会导致错误(BY 变量 householdID 不在输入数据集 data.datasetb 上)。
我认为最好的做法是让 DatasetB 看起来像这样:
DatasetB:
HouseholdID DatasetBHouseholdID
100003 100003
100001 100001
但是我该怎么做呢?
使用 IN=
数据集选项。
data data.datasetc;
merge data.dataseta data.datasetb (in=inB);
by householdid;
if inB then datasetbhouseholdID=householdID;
run;