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
相关产品推荐
相关产品推荐

