-1

我有一个包含村庄名称、市场、教堂和医院的数据集。市场、教堂和医院没有直接命名;相反,它们是按村庄列出的,因此它们可以直接与村庄名称相关联。坐标仅按村庄列出。我需要在 SAS 中重新组织数据集,以便村庄的 GPS 坐标与各自的市场、教堂和医院相关联。

这是我正在尝试做的更好的可视化:

转换此数据集:

Long   |Lat    |Village|Market  |Church 
----------------------------------------
X(A)   |Y(A)   | A  |A  |A  
X(B)   |Y(B)   | B  |B  |B  
X(C)   |Y(C)   | C  |A  |A  
X(D)   |Y(D)   | D  |A  |D  
X(E)   |Y(E)   | E  |B  |B  
X(F)   |Y(F)   | F  |F  |F  
X(G)   |Y(G)   | G  |F  |F  
X(H)   |Y(H)   | H  |H  |F  

对于看起来像这样的东西,新创建的市场和教堂坐标列(基于原始村庄坐标):

Long|Lat  |Village|Market|Market_Long|Market_Lat |Church|Church_Long|Church_Lat
-------------------------------------------------------------------------------
X(A)|Y(A) |A      |A     |X(A)       |Y(A)       |A     |X(A)       |Y(A)
X(B)|Y(B) |B      |B     |X(B)       |Y(B)       |B     |X(B)       |Y(B)
X(C)|Y(C) |C      |A     |X(A)       |Y(A)       |A     |X(A)       |Y(A)
X(D)|Y(D) |D      |A     |X(A)       |Y(A)       |D     |X(D)       |Y(D)
X(E)|Y(E) |E      |B     |X(B)       |Y(B)       |B     |X(B)       |Y(B)
X(F)|Y(F) |F      |F     |X(F)       |Y(F)       |F     |X(F)       |Y(F)
X(G)|Y(G) |G      |F     |X(F)       |Y(F)       |F     |X(F)       |Y(F)
X(H)|Y(H) |H      |H     |X(H)       |Y(H)       |F     |X(F)       |Y(F)

我知道这里的格式有点奇怪,所以这里有一些这些示例表的图像:

原表:

所需表:

感谢您对此有所了解!

4

1 回答 1

0

正如所评论的那样,答案似乎就像将它们定义为新变量一样微不足道。由于无论如何您都将定义新变量,因此您可以使用 length 语句来设置您希望它们出现在数据集中的顺序。

data old;

input  lon $ lat $ village $ market $ church $ hosp $;
Datalines;
 X(A) Y(A) A A A B
 X(B) Y(B) B B B B
 X(C) Y(C) C A A D
 X(D) Y(D) D A D D
 X(E) Y(E) E B B B
;
run;


data new;

length lon lat village market market_lon market_lat Church church_lon church_lat
       hosp hosp_lon hosp_lat $ 100;

set old;

market_lon = lon;
market_lat = lat;
church_lon = lon;
church_lat = lat;
hosp_lon = lon;
hosp_lat = lat;

run;

这将适用于一个简单的情况,但如果有更多的变量,而不仅仅是市场、教堂和医院,您可能会对使用宏和 %do 循环来迭代 varnames 列表而不是手动定义新变量感兴趣。

宏 %do 的好文章:http: //blogs.sas.com/content/sastraining/2015/01/30/sas-authors-tip-getting-the-macro-language-to-perform-a-do-loop -over-a-list-of-values/

于 2016-12-16T10:56:29.180 回答