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

如何在SAS中筛选偶数列并保留首列Date处理金融数据?

SAS实现方案

步骤1:筛选目标列

首先提取首列Date以及所有处于偶数位置的price列。通过proc contents获取列的位置信息,筛选后拼接成列名列表,再提取目标列:

/* 获取数据集列的位置与名称信息 */
proc contents data=raw_data out=col_info(keep=name varnum) noprint;
run;

/* 筛选首列(varnum=1)和偶数位置的price列 */
data keep_cols;
    set col_info;
    /* 保留首列,或列位置为偶数且列名以price开头的列 */
    if varnum = 1 or (mod(varnum, 2) = 0 and upcase(name) like 'PRICE%');
run;

/* 将筛选后的列名拼接为宏变量,用于后续数据提取 */
proc sql noprint;
    select name into :keep_list separated by ' '
    from keep_cols;
quit;

/* 提取目标列到新数据集 */
data filtered_data;
    set raw_data(keep=&keep_list);
run;

步骤2:宽表转长表

使用proc transpose将筛选后的宽表转换为长表,保留Date作为分组键,将多个price列合并为单个数值列,并保留原列名作为标识:

/* 宽表转长表 */
proc transpose data=filtered_data out=long_data(rename=(col1=price _name_=price_label)) drop=_label_;
    by Date; /* 按首列Date分组,确保每个日期对应所有price记录 */
    var price:; /* 匹配所有以price开头的列 */
run;

代码说明

  • proc contents:获取数据集元数据,用于判断列的位置和名称,避免手动列名输入的误差。
  • 筛选逻辑:通过varnum(列位置)精准定位目标列,确保只保留首列Date和偶数位置的price列。
  • proc transpose:自动将指定的price列转为行记录,_name_变量存储原宽表的列名(如price1、price2),重命名后可用于区分不同的price序列。

内容的提问来源于stack exchange,提问作者MARIO ANTONIO CASTILLO MACHUCA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:42:27