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

如何在SAS中按ID和Type合并多行并满足附加计算条件

按ID和Type聚合数据集的实现方案

SAS、Python(Pandas)等工具都能轻松实现这类分组聚合需求,以下是可批量复用的代码示例:

SAS 实现

单数据集处理

用PROC SQL直接完成分组求和与加权平均计算:

PROC SQL;
    CREATE TABLE aggregated_data AS
    SELECT 
        ID,
        Type,
        SUM(Length) AS Total_Length,
        SUM(Length * Value) / SUM(Length) AS Weighted_Avg_Value
    FROM original_data
    GROUP BY ID, Type;
QUIT;

批量处理多数据集

通过宏定义实现批量处理,只需传入待处理的数据集列表即可:

%MACRO aggregate_ds(ds_list);
    %DO i = 1 %TO %sysfunc(countw(&ds_list.));
        %LET ds = %scan(&ds_list., &i.);
        PROC SQL;
            CREATE TABLE &ds._agg AS
            SELECT 
                ID,
                Type,
                SUM(Length) AS Total_Length,
                SUM(Length * Value) / SUM(Length) AS Weighted_Avg_Value
            FROM &ds.
            GROUP BY ID, Type;
        QUIT;
    %END;
%MEND;

/* 调用示例:处理数据集A、B、C */
%aggregate_ds(A B C);

Python Pandas 实现

单数据集处理

利用groupby结合自定义聚合函数完成计算:

import pandas as pd

# 读取原始数据(支持csv、excel等格式)
df = pd.read_csv("original_data.csv")

# 分组聚合
agg_df = df.groupby(['ID', 'Type']).agg(
    Total_Length=('Length', 'sum'),
    Weighted_Avg_Value=('Value', lambda x: (x * df.loc[x.index, 'Length']).sum() / df.loc[x.index, 'Length'].sum())
).reset_index()

# 保存结果
agg_df.to_csv("aggregated_data.csv", index=False)

批量处理多文件

遍历指定目录下的所有数据文件,自动完成聚合并输出结果:

import pandas as pd
import os

# 配置输入输出目录
input_dir = "./input_datasets/"
output_dir = "./aggregated_results/"
os.makedirs(output_dir, exist_ok=True)

# 批量处理所有csv文件
for filename in os.listdir(input_dir):
    if filename.endswith(".csv"):
        file_path = os.path.join(input_dir, filename)
        df = pd.read_csv(file_path)
        
        # 执行聚合
        agg_df = df.groupby(['ID', 'Type']).agg(
            Total_Length=('Length', 'sum'),
            Weighted_Avg_Value=('Value', lambda x: (x * df.loc[x.index, 'Length']).sum() / df.loc[x.index, 'Length'].sum())
        ).reset_index()
        
        # 保存结果文件
        output_filename = f"{os.path.splitext(filename)[0]}_agg.csv"
        agg_df.to_csv(os.path.join(output_dir, output_filename), index=False)

内容的提问来源于stack exchange,提问作者Larissa Wang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:26:13