我正在尝试通过变量“国家/地区”匹配合并两个数据集。这两个数据集都包含变量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
答案 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