SAS技术求助:计算各城市年度数值两两差值的中位数
SAS 实现思路与代码示例
1. 宽表转长表(若输入为宽表)
假设你的输入表名为city_data,结构为每个年份对应一列(如y1988、y1989…y2000),首先用PROC TRANSPOSE将其转为包含city、year、value的长表:
proc transpose data=city_data out=city_long(rename=(col1=value)); by city; var y1988-y2000; run; data city_long; set city_long; year = input(substr(_name_,2),4.); /* 提取年份数值,如从"y1988"得到1988 */ drop _name_; run;
2. 生成所有i<j的年度配对并计算差值
通过自连接筛选出每个城市中年份i<j的组合,计算year_i - year_j的差值:
proc sql; create table city_diff as select a.city, a.year as year_i, b.year as year_j, a.value - b.value as diff from city_long a inner join city_long b on a.city = b.city and a.year < b.year; quit;
3. 计算每个城市差值的中位数
用PROC MEANS按城市分组计算差值的中位数:
proc means data=city_diff noprint; by city; var diff; output out=city_median median=diff_median; run;
也可以用PROC UNIVARIATE替代,支持输出更多统计量:
proc univariate data=city_diff noprint; by city; var diff; output out=city_median median=diff_median; run;
内容的提问来源于stack exchange,提问作者LR2008
相关产品推荐
相关产品推荐

