前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS自定义函数获取某逻辑库下所有表名

SAS自定义函数获取某逻辑库下所有表名

作者头像
专业余码农
发布2020-07-16 10:06:03
2.8K0
发布2020-07-16 10:06:03
举报
文章被收录于专栏:老Z的博客老Z的博客

今天看到一个群友提的一个问题:SAS有无一个函数将某LIBNAME下表名都取出?这个问题用字典数据表或者视图(DICTIONARY Tables and SASHELP Views)可以轻松解决。如获取逻辑库SASHELP下所有表名,代码如下:

代码语言:javascript
复制
proc sql noprint;
     select MEMNAME into :tnames separated by ', '
         from dictionary.tables
         where libname='SASHELP'
		 ;

    	select MEMNAME into :tnames separated by ', '
         from sashelp.vtable
         where libname='SASHELP'
		 ;
 quit;

但是群友的问题是有没有现成的函数,即类似下面这样的用法:

代码语言:javascript
复制
data _null_;
    TNAMES=get_tnames('SASHELP');
run;

而我们知道当前在SAS中并没有这种功能的函数。好在SAS 9.2版本中的PROC FCMP允许用户编写个性化的函数并可在DATA步使用(SAS 9.1.3中用户自定义函数只能在某些过程步中使用)。代码如下:

代码语言:javascript
复制
%macro get_tnames();
proc sql noprint;
    select MEMNAME into :tnames separated by ', '
        from dictionary.tables
        where libname=&lib
        ;
quit;
%mend get_tnames;

proc fcmp outlib=work.functions.demo;
    function get_tnames(LIB $) $;
    length TNAMES $ 32767;
    rc=run_macro('get_tnames', LIB, TNAMES);
    return(TNAMES);
    endsub;
run;

options cmplib=work.functions;

data demo;
    TNAMES=get_tnames('SASHELP');
run;

结果如下:

UDF
UDF
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档