专栏首页SAS程序分享号号号SAS-一个小程序实现变量类型的自动转化~

SAS-一个小程序实现变量类型的自动转化~

做为标题党的小编,一贯喜欢将标题写很大...嗯,最近写了一个小程序,虽然是一个没有任何技术含量的程序,不过还是想分享给大家。这个程序实现的功能是将SAS数据集中数值型变量转换成字符型变量,如果变量含有format,这时会将显示的format的值直接赋值给新的变量。

一个小功能

写这个宏的功能与目的是啥呢。在利用export输出csv,excel时,我们输出的总是数据存储的实际值,而很多时候需要呈现format显示的值。所以我就写了这个小程序,

基本一点技术含量都没有,就用了sql定义宏变量的方式,然后一个vvalue函数,最近感觉爱上这个函数了...下面看代码

/*************************************************************************************************************************
宏名称    :  ds_var2char

目的      :  将数值型变量/提取format的值

参数说明    :    
  
inds     输入数据集
outds    输出数据集
length   长度 :  默认值2500
type        
1:数据集第一条观测为变量的标签
2:数据集第一条观测为变量的名称
3:数据集第一条观测为变量标签、数据集第二条观测为变量的名称
0:数据集不包含变量相关信息;   默认值为:0

%ds_var2char(inds=sashelp.class,outds=class);

________________________________________________________________________________________________________________________
*
__________________________________________________________________________________________________________________________
版本     日期           修改人             修改描述
---     -----------    ------------     ----------------------------------------------------------------------------------
1.0     2018.05.07      setup~           创建
****************************************************************************************************************************************/;

%macro ds_var2char(inds=,outds=,type=0,length=2500);
proc contents data=&inds. out=ds_cnt_temp(keep=name label varnum) directory noprint memtype=data centiles;
proc sort data=ds_cnt_temp  out=ds_cnt_temp  sortseq=linguistic(numeric_collation=on);by varnum ;
run;
proc sql noprint;
select name into:msvar_temp separated by " " from ds_cnt_temp   ;
select strip(name)||"_c="||"strip(vvalue("||strip(name)||strip("))") into:ys_vas1 separated by " ;" from ds_cnt_temp   ;
select strip(name)||"_c="||strip(name) into:re_vas1 separated by " " from ds_cnt_temp   ;
select strip(name)||"_c" into:msvar_temp2 separated by " " from ds_cnt_temp   ;
quit;
data ds_cnt_temp;
set ds_cnt_temp;
names=name;
labels=label;
run;
proc transpose data=ds_cnt_temp out=ds_cnt_temp1 ;
var  labels names;
id name ;
idlabel label;
run;
data cnts_ds(rename=(&re_vas1.));
length &msvar_temp2. $&length.;
set &inds.;
&ys_vas1.;
drop &msvar_temp.;
run;
data &outds.;
length &msvar_temp. $&length..;
set ds_cnt_temp1(keep=&msvar_temp.)  cnts_ds;
%if &type.=1 %then %do;
if _N_=2 then delete;
%end;
%if &type.=2 %then %do;
if _N_=1 then delete;
%end;
%if &type.=0 %then %do;
if _N_ in (1 2 )then delete;
%end;
run;
proc delete data=ds_cnt_temp1  ds_cnt_temp  cnts_ds  ;quit;
%mend;

没啥技术含量,宏代码复制就能用!参数注释部分应该已经说的很清楚了...不过还是用一个例子来证明一下Macro是没有问题的,大家请放心使用...

/*功能测试:定义format*/
proc format ;
value  sgs  1-<13="儿童"  13-<16="少年" 16 -High="青年" ;
run;
/*给年龄添加format*/
data test;
  set sashelp.class;
  format age sgs.;
run;
/*执行宏:执行后悔生成test1数据集*/
%ds_var2char(inds=test,outds=test1);

本文分享自微信公众号 - SAS程序分享号号号(xiaocgn),作者:setup~

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAS输出RTF精美排版背后的Code

    Proc Template:简单举一例子(仅针对于RTF输出Table,写法很多仅以我常见写法之一为例)

    Setup
  • ODS Output RTF(Table Listing)

    在SAS实际编程过程中经常会用到Ods 与report来输出table/listing

    Setup
  • SAS X Command Execute Python Code

    小编最近在潜心研究外部数据导入SAS,深感Excel的导入的不便利,想实现程序控制将Excel改为CSV在通过CSV导入SAS。想着想着,就想到用外部语言来实现...

    Setup
  • 51Nod-2000-四边形分割平面

    ACM模版 描述 ? 题解 一开始脑子卡死了,想着两个四边形最多只能分成 44 个,后来大佬提示我同心旋转 4545 度,然后秒懂……╮(╯▽╰)╭哎,脑子不够...

    f_zyj
  • 如何输出字符窜的所有组合

    例如“abc”输出a,b,c,ab,ac,bc,abc #include<stdio.h> void DFS(char str[],char ss[],int ...

    用户1624346
  • Rxjs入门

    Rxjs英文官网域名已经变为 https://rxjs-dev.firebaseapp.com/

    lilugirl
  • netty案例,netty4.1基础入门篇二《NettyServer接收数据》

    繁事都需要一个简单的入门的点,尤其学习程序员行业的知识最快的方式是先运行期helloworld,往往这样一个简单能运行的例子,就能解除你当前遇到的所有疑惑。切记...

    小傅哥
  • 经典笔试题-编程题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • Jenkins与Docker相关的Plugin使用

    ##Jenkins与Docker相关的Plugin使用## ###Jenkins与Docker相关的Plugin### 在Jenkins Plugin页面搜索与...

    donghui
  • Git详细教程 – 版本库的创建和添加内容到版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git...

    Javanx

扫码关注云+社区

领取腾讯云代金券