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

SAS Studio按列名含'time'筛选列的报错问题求助

问题排查与解决方案

你的代码报错是因为_name_不是work.dataset1中的数据列,它属于SAS的元数据字段,不能直接从业务数据集中查询。要筛选包含time的列名,得从存储元数据的系统表或通过PROC CONTENTS生成的列名数据集入手,以下是两种可行方案:

方案一:直接查询SAS系统字典表

利用sashelp.vcolumn(SAS内置的元数据字典表),它存储了所有SAS库、数据集的列信息:

proc sql;
  select name into :names separated by ' '
  from sashelp.vcolumn
  where libname = 'WORK' 
    and memname = 'DATASET1' 
    and upcase(name) like '%TIME%';
quit;
  • 注意:libname和memname必须大写,因为字典表中存储的库名、数据集名都是大写格式
  • separated by ' '会把匹配到的列名用空格分隔,存入宏变量&names,方便后续调用
  • upcase()用于忽略大小写,确保Time/TIME/time这类列名都能被匹配

方案二:用PROC CONTENTS生成列名数据集后查询

先通过PROC CONTENTS导出目标数据集的列名信息,再筛选:

proc contents data=work.dataset1 out=col_names(keep=name) noprint;
run;

proc sql;
  select name into :names separated by ' '
  from col_names
  where upcase(name) like '%TIME%';
quit;
  • proc contents的out参数会生成包含列名的数据集,keep=name只保留列名字段,noprint避免输出冗余信息
  • 后续SQL查询就可以直接从生成的col_names数据集中筛选符合条件的列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:00