导致合并数据的匹配匹配

时间:2019-10-22 10:39:24

标签: sas

我正在尝试通过变量“国家/地区”匹配合并两个数据集。这两个数据集都包含变量country(其中一个变量名为“ name”,但已更改为country)和其他变量,一个数据集(data1)包含大洲信息。但是,我遇到了SAS的问题,即仅将数据集串联在一起,即将它们堆叠在一起。

我尝试了基础知识,按变量对数据集进行排序,并确保合并数据集时使用by语句。

proc sort data=data1;
by name;
run;

proc sort data=data2;
by country;
run;

data merged_data;
length continent $ 20 country $ 200;
merge data1(rename=(name=country)) data2;
by country;
run;

此代码的结果是将数据集堆叠在一起。我的目标是将大陆与国家联系起来,即确定每个国家的大陆。

data1:

Continent    Name
Asia         China
Australia    New Zealand
Europe       France

data2:

Country         Var    City
China           1.2    Beijing, China
New Zealand     3.5    Auckland, New Zealand
France          2.8    Paris, France

data I want:

Country         Var    City                    Continent
China           1.2    Beijing, China          Asia
New Zealand     3.5    Auckland, New Zealand   Australia
France          2.8    Paris, France           Europe

data I get:

Country         Var    City                     Continent
China           1.2    Beijing, China          
New Zealand     3.5    Auckland, New Zealand   
France          2.8    Paris, France           
China                                           Asia
New Zealand                                     Australia
France                                          Europe

2 个答案:

答案 0 :(得分:1)

根据我的示例数据,您的逻辑对我有用。也许您的错误与您的length语句

有关
Data Df1;
    INPUT Country $1-18 @19 Temp;
    datalines;
    United States 87
    Canada        68
    Mexico        88
    Russia        77
    China         55
    ;
Run;

Data Df2;
    INPUT name $1-18 @19 season $;
    datalines;
    United States Summer
    Canada        Summer
    Mexico        Summer
    Russia        Winter
    China         Winter
    ;
Run;


Proc sort data=Df1;
    by Country;
Proc sort data= Df2;
    by Name;
Run;

Data Merged_data;
    merge Df1 Df2(rename=(name=country));
    by country;
Run;

答案 1 :(得分:0)

确保变量的值与您认为的一样。使用$ QUOTE打印值。格式。使用固定长度的字体查看结果。等

也许其中一个具有您看到的实际值,而另一个具有通过格式解码为您看到的值的代码。

如果这不是格式化值与实际值的问题,那么DATA2中的记录可能带有前导空格。

该程序产生您显示的结果。如果您从DATA2中的COUNTRY中删除前导空格,则合并将按预期进行。

data data1 ;
  input Continent $13. Name $15.;
cards;
Asia         China
Australia    New Zealand
Europe       France
;

data data2;
  input Country $15. Var City $25.;
  country=' '||country;
cards;
China           1.2    Beijing, China
New Zealand     3.5    Auckland, New Zealand
France          2.8    Paris, France
;

proc sort data=data1; by name; run;
proc sort data=data2; by country; run;

data want ;
 merge data2 data1(rename=(name=country)) ;
 by country;
run;

结果:

Obs    Country         Var    City                     Continent

 1      China          1.2    Beijing, China
 2      France         2.8    Paris, France
 3      New Zealand    3.5    Auckland, New Zealand
 4     China            .                              Asia
 5     France           .                              Europe
 6     New Zealand      .                              Australia