Sas 匹配合并导致连接数据

Sas 匹配合并导致连接数据,sas,Sas,我试图通过变量“country”匹配合并两个数据集。两个数据集都包含变量country(一个名为“name”,但改为country)和其他变量,一个数据集(data1)包含大陆信息。然而,我遇到了SAS只是连接数据集的问题,也就是说,将它们堆叠在另一个之上 我已经尝试了一些基本方法,按照相同的by变量对数据集进行排序,并确保在合并数据集时使用by语句 proc sort data=data1; by name; run; proc sort data=data2; by country; ru

我试图通过变量“country”匹配合并两个数据集。两个数据集都包含变量country(一个名为“name”,但改为country)和其他变量,一个数据集(data1)包含大陆信息。然而,我遇到了SAS只是连接数据集的问题,也就是说,将它们堆叠在另一个之上

我已经尝试了一些基本方法,按照相同的by变量对数据集进行排序,并确保在合并数据集时使用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


从我的示例数据来看,您的逻辑适用于我。也许你的错误与你的
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;

确保变量的值是您认为的值。使用$QUOTE打印值。总体安排使用固定长度字体查看结果。等等

可能其中一个有您看到的实际值,而另一个有一个代码,该代码通过一种格式解码为您看到的值

如果不是格式化值与实际值之间的问题,那么数据2中的记录可能有前导空格

此程序生成您正在显示的结果。如果从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

哪个数据集具有可变的大陆?不应该两者兼而有之。举例说明您认为应该匹配但SAS不匹配的国家/地区和名称的某些值。情况是一样的吗?有前导空格吗?其他不可见字符?只有一个数据集具有可变字符。我已经更新了我的问题,以显示我的数据集示例。