前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS-一条群消息引发的思考

SAS-一条群消息引发的思考

作者头像
Setup
发布2019-10-21 16:47:53
5200
发布2019-10-21 16:47:53
举报

请看问题

看上图,某群友提出将table1的结构转换成table2的结构,这个是一个很明显的转置的操作,也并不特别明显,但是还是很明显的。

常规的解决问题方法,用transpose可以进行操作,其实并不需要merge,另外一位群友提出的在sql中利用select union all的方法,小编也尝试了一下,始终没有反推出该法如何实现,最后看到一次查2列的补充,小编顿时觉得改法有点繁琐,虽说繁琐,我们还是需要本着”黑猫白猫抓住老鼠就是好猫”的态度看问题。接下来看一下他们都是如何实现的。

1 transpose的方法

代码语言:javascript
复制
data have;

input a_t1 b_t1  a_t2 b_t2 a_t3  b_t3 a_t4 b_t4;
cards;
1 2 3 4 5 67 8
;
run;
/*transpose的操作方法*/
proc transposedata=have  out=temp1;
by notsorted;   
var_all_;
run;
proc sortdata=temp1  out= temp1 ;by _NAME_;quit;
proc transposedata=temp1  out=temp2;
by _NAME_;
var COL:;
run;
data temp3;
set temp2;
Item=scan(_NAME_,2,'_');
_NAME_=scan(_NAME_,1,'_');    
run;
proc sortdata=temp3  out=temp3  ;by   Item ;quit;
proc transposedata=temp3  out=temp4(drop=_NAME_);
by Item;
var COL1;
run;

请看结果

proc transpose的用法,其实可以看小编历史推送,对proc transpose有一个基本的介绍,其实也可以通过这个栗子在来熟悉一下proc transpose,小编觉得任何一个语法刚开始用的时候可能不太熟念,不太好理解,但是多使用几次,都写几个需求,就好理解,很早的时候小编转置都是用array数组去转置,后来就觉得学了这久的程序连proc transpose都不会,就太不对起自己花在SAS上的时间了,就尝试使用proc transpose 确实方便很多,很好用。

2 Sql union all

代码语言:javascript
复制
/*Sql Unionall*/
proc sql noprint;
create tableTemp5 as
select 'a'as Item ,a_t1 as t1,a_t2 as t2 ,a_t3 as t3 ,a_t4 as t4    from have
union all
select 'b'as Item ,b_t1 as t1,b_t2 as t2 ,b_t3 as t3 ,b_t4 as t4    from have;
quit;
proc transpose data=Temp5  out=Temp6;
by notsorted;   
var t1-t4;
ID Item;
run;

小编真的没有想出sql union all 如何不使用transpose可以快捷的做,小编反推程序的时候,查了一下Sql(不是proc sql 是数据库的Sql语言,其实类似),好像Sql也可以实现转置,不过看起来好烦啊,完全不如SAS便捷。在这里,我先使用sql 将数据结构稍微变动,在利用proc transpose进行转置的,看起来代码少,但是!但是如果真实需求中不止这8个变量呢,所有还是觉得前面的代码价值更高。这个其实也有亮点,就是在数据的合并的上。多一种方法就多一份成功的把握,还是需要博学。

就俩条回复,又怎么能称的上群英献策呢,当然不止俩条,真正大佬的回复截图就在下面。啥时候我也能达到这个水平呢,把SAS都能写出花样来,各种知识点运用的活灵活现~

大佬的回复-1

大佬的这段代码,我之前也没有见过这样的写法,俩个字“佩服”,如果非要用一句话来形容,那就是“佩服”X10....,为啥佩服呢,这位大佬这里用到的语法很多,知识也多,有数组,有正则,有filname还有inc,我算长见识了,%inc还能这样写...

大佬的回复-2

这是大佬的第二个解决方案,这里大佬又厉害了,把call execute用的很好。

小编其实准备想继续说一下大佬用的知识点的用法等等,突然发现自己对那些还是不太熟练,现在还没有准备好,以后会穿插在Macro、程序的推送中提到相关的用法。敬请期待与持续关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请看问题
    • 1 transpose的方法
      • 2 Sql union all
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档