设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1762|回复: 0

SAS中宏的加密和调用

[复制链接]

18

主题

107

金钱

180

积分

入门用户

发表于 2019-6-28 14:35:41 | 显示全部楼层 |阅读模式

某些时候我们可能需要隐藏SAS的源代码,这时我们可以把需要隐藏的代码放到宏里,并对宏进行加密。具体方法根据网上的一些文章介绍,进行如下测试:
第一步:生成加密的宏
  1. /*加密宏*/
  2. LIBNAME test ‘c:\test’;

  3. OPTIONS MSTORED SASMSTORE=test;

  4. %macro foobar1(arg) /store des=”This macro if for test”
  5. /*source*/;
  6. %put arg = &arg;

  7. %mend;

  8. %macro foobar2(arg) /store des=”This macro if for test”
  9. /*source*/;
  10. %put arg = &arg;

  11. %mend;
复制代码


日志如下:
1.png
生成的两个宏保存在c:\test目录下的sasmacr.sas7bcat文件中,经测试,可以修改或者增加宏。

第二步:调用已经加密的宏
LIBNAME test ‘c:\test’;

OPTIONS MSTORED SASMSTORE=test;
/*如果生成宏的时候有source选项,可以用以下命令打印出宏的源代码*/

/*%copy foobar1/source;*/
%foobar1(“this is test1”);
%foobar2(“this is test2”);

日志如下:
2.png
加密的宏运行没有问题。这里需要注意,如果需要在加密的宏中保存源代码,可以加上source选项,但是这个选项也使得加密没有意义了,因为可以使用%copy直接把源代码打印出来。

%copy foobar1/source;
3.png
示例中我没有使用source选项,所以%copy命令无法正常使用。

以上就完成了加密和调用的测试,但是这还没有完,这样的加密一样是没用的,因为宏选项中MPRINT可以让宏运行前先打印宏的代码,请看下面的测试结果。
代码:
  1. LIBNAME test ‘c:\test’;
  2. OPTIONS MSTORED SASMSTORE=test;

  3. %macro foobar1 /store des=”This macro if for print”
  4. /*source*/;
  5. proc print data=sashelp.class;
  6. where sex=”F”;
  7. run;
  8. %mend;
复制代码

以上代码修改了之前定义的宏foobar1 。
调用代码如下,加入了OPTIONS MPRINT;语句。
  1. LIBNAME test ‘c:\test’;

  2. OPTIONS MSTORED SASMSTORE=test;
  3. OPTIONS MPRINT;

  4. %foobar1;
复制代码

结果如下:
4.png
可见,加密同样无效,这时我们需要在宏内设定选项覆盖全局选项MPRINT(每个宏都需要设置),具体修改如下:
LIBNAME test ‘c:\test’;
OPTIONS MSTORED SASMSTORE=test;

%macro foobar1 /store des=”This macro if for print”
/*source*/;

options nomprint nosource;
proc print data=sashelp.class;
where sex=”F”;
run;
%mend;

这样宏的加密就完成了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表