You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:25:19