前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS自动打开数据集及复制变量值

SAS自动打开数据集及复制变量值

作者头像
专业余码农
修改2020-07-16 09:54:39
1K0
修改2020-07-16 09:54:39
举报
文章被收录于专栏:老Z的博客老Z的博客

上个月的今天,我从南到北,从深圳奔赴帝都参加了一个制药行业软件用户组2016中国区年会(PharmaSUG China 2016)。听了两天的报告,收获不少。有幸见到SAS绘图大神Sanjay Matange,可惜当时忘记了要合影。这个名字可能大家不熟悉,但是他的博客Graphically Speaking我相信很多人有看过。在众多报告中,印象较深的是这个。作者分享了几个很有用的SAS技巧,比如自动打开所标记的数据集、自动获取某个变量的值。可惜没有分享源程序,所以我写了三个小程序,实现了自动打开数据集、执行选中程序并打开生成的数据集以及复制变量值。

  1. 自动打开所选中的数据集。当我们想打开一个很长程序中间过程的一个数据集时,一般的操作是资源管理器 - 逻辑库,然后找到目标数据集双击打开。有了下面这个宏,我们只要在程序编辑器选中目标数据集,然后按快捷键就可以自动打开。
代码语言:javascript
复制
%macro markdsn();
gsubmit "
dm 'wcopy';

filename clip clipbrd;

data _null_;
    infile clip;
    input;
    call execute('dm ""vt '||_INFILE_||';"" continue ;');
run;

filename clip clear;";
%mend markdsn;
  1. 运行选中程序并自动打开所生成的数据集。当我们想运行一个很长程序中间几行程序并自动打开所生成的数据集时,一般的操作是运行选中的程序,然后资源管理器 - 逻辑库,再双击打开刚生成的数据集。有了下面这个宏,我们只要在程序编辑器选中目标程序,然后按快捷键就可以运行选中程序并自动打开所生成的数据集。
代码语言:javascript
复制
%macro markcode();
gsubmit "
dm 'wcopy';

filename clip clipbrd;

data _null_;
    infile clip end=eof;
    input;
    call execute(_INFILE_);
    if eof then call execute('%nrstr(dm ''vt &syslast;'' continue ;)');
run;

filename clip clear;";
%mend markcode;
  1. 自动复制选中变量的值。当我们要在一个数据集中筛选出某一变量取特定值时的记录时,比如要筛选某一个AETERM,一般的操作是打开数据集或者从他处手动复制这个AETERM,然后粘贴到程序编辑器选中对应的语句中。有了下面这个宏,我们只要在程序编辑器选中目标变量,然后按快捷键就可以自动将目标变量的值复制到剪贴板,每按一次得到目标变量的一个值,直到得到想要的变量值,再粘贴到程序编辑器选中对应的语句中。
代码语言:javascript
复制
%macro vvalue();
gsubmit '
dm "wcopy";

filename clip clipbrd;

data _null_;
    infile clip;
    input;
    call symputx("var", _INFILE_);
run;

filename clip clear;

proc sql noprint;
    select distinct &var into :varlst separated by "@"
    from &syslast
    ;
quit;

data _null_;
    if ^symexist("increment") then call symputx("increment", 1, "g");
    else call symputx("increment", 1 + input(symget("increment"), best.), "g"); 
run;

filename clip clipbrd;

data _null_;
    file clip;
    length value $32767;
    if &increment <= countw("&varlst", "@") then value=scan("&varlst", &increment, "@");
    else value=scan("&varlst", countw("&varlst", "@"), "@");
    put value;
run;

filename clip clear;';
%mend vvalue;

接下来说下设置和用法。设置如下:

  1. 将这些宏放到某一自动编译宏的逻辑库,如sasautos值对应的路径
  2. 在命令行输入以下命令为宏设置对应的快捷键以便调用宏
代码语言:javascript
复制
keydef 'F9' '%markdsn'
keydef 'F10' '%markcode'
keydef 'F11' '%vvalue'

用法如下:

  1. 选中目标数据集按F9,选中的数据集自动打开
  2. 选中目标程序行按F10,选中的程序执行并自动打开所生成的数据集
  3. 选中目标变量按F11一次,得到目标变量的第一个值,再选中目标变量按F11一次,得到目标变量第二值,重复上述动作直到得到想要的变量值
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档