今天有一个当妈妈的读者问我一个问题,我为什么加上“当妈妈”3个字呢?因为随着关注我的人越来越多,能遇上各色各样的人,有当妈妈的,有医药代表想转SAS的,有DM/CRA想转SAS的,还有好几个失业想转SAS的,对于想转SAS的,在这祝你们都能成功。
这个读者问了一个问题:就是DM要求在EXCEL中用SAS代码加上超链接,当时我一听,直接用EXCEL创建超链接的功能不就可以了吗,但是他说可能有几十张表,我想好吧,确实用SAS代码可能更快一些。这一看就是写DVP或者SDV,我现在好久都没碰过了,所以说DM为什么建议找个SAS程序员对象,哈哈。
我搜索了相关资料,如果导出的EXCEL文件表单名称不变的,要先知道要导出哪些表,我在这先创建了一个测试表。其中Alfred和Mary是有超链接的(我手动在EXCEL创建的,显示的路径是file:///D:\A_work\Practice\hyperlink.xlsx?-?Alfred!A1)
我们就得利用这个路径在我们的SAS code创建超链接。
不过需要注意的是,SAS 利用这个路径创建超链接,需要把?-变成?#,
同时需要创建一个format,就像下面这样
proc format;
value?$hyper
'Alfred'="file:///D:\A_work\Practice\hyperlink2.xlsx#Alfred!A1";
run;
之后我们利用这个format在EXCEL里面创建超链接。现在我导出另一个EXCEL,
可以看到是创建超链接的,但是因为我没有输出Alfred这张sheet,所以显示“引用无效”,但是她们到时候是会创建对应表的。
同时这个超链接是没有颜色显示的,但我的想法是可以给这列在define的时候设置一些样式,应该就能有颜色显示,这里我就不举例了。
上面是超链接跳到某个表单,如果是我想点击Alfred的时候就跳到某个表单里的某个单元格呢?
这时候如果用上面那种方法就没用了,需要用到compute模块。假如我想实现点击"Mary"就跳到CARS这张sheet的B2单元格,可以这样
compute name;
if index(upcase(name),'MARY') > 0 then do;
call define(_COL_,'URL',"file:///D:\A_work\Practice\hyperlink2.xlsx#cars!B2");
call define(_COL_,"style","STYLE={color=#0000FF}");
end;
endcomp;
run;
导出的EXCEL如下
确实能跳到指定单元格,但是我发现了一个问题,就是跳到sheet和跳到指定单元格不能同时实现???很奇怪,但是我想她们想实现的效果第一种方法就可以吧。
就这样吧,这段代码就免费发给这个读者啦!