楼主: playmore
3022 2

[SAS] 在SAS中实现相对路径引用 [推广有奖]

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16356 个
通用积分
8.6697
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1332 小时
注册时间
2007-1-11
最后登录
2025-12-1

初级学术勋章 初级热心勋章 中级热心勋章

楼主
playmore 发表于 2015-3-9 17:21:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如果用SAS写一个比较大的工程

全部放在一个SAS文件里,看起来会很麻烦

并且SAS自带的编辑器极端难用,也不会自动折叠什么的

于是想到了把一个长代码拆成若干小代码,然后用%include调用,如下所示:

  1. %include "d:\temp\a.sas";
复制代码


      这时出现的问题就是SAS能否实现相对路径引用,这样你的代码不论移到哪个文件夹,都可以直接调用,不用再修改路径名称了。

      于是我在网上查了下,发现直接实现应该无望,于是用了下面折衷的办法,用一个宏得到当前的活动文件夹路径宏变量,然后就可以在%include中使用了


  1. %macro GetCurrentPath(Type,OutputVar);

  2. /**********************************************************************/
  3. /* 此宏用于得到当前活动路径或文件名。其中,Type是标记变量,=Path表示  */
  4. /* 不包括文件名的路径,以\结尾,=FullPath表示全部路径,=FileNameAndExt*/
  5. /* 表示包含扩展名的全部文件名,=FileName表示文件名;OutputVar是输出的 */
  6. /* 宏变量名称。此宏主要用于变相得到相对路径引用。                     */
  7. /*                                                                    */
  8. /* 最终得到的是当前活动路径或文件名的宏变量&OutputVar。               */
  9. /*                                                                    */
  10. /**********************************************************************/

  11. /* 检查Type的合法性 */
  12. %if (%UPCASE(&Type) NE PATH) AND (%UPCASE(&Type) NE FULLPATH) AND (%UPCASE(&Type) NE FILENAMEANDEXT) AND (%UPCASE(&Type) NE FILENAME) %then %do;
  13.         %put ERROR: The Type should be Path, FullPath, FileNameAndExt or FileName, case insensitive and without quotes.;
  14.         %goto exit;
  15. %end;

  16. /* 检查OutputVar的存在性 */
  17. %if &OutputVar EQ %STR() %then %do;
  18.     %put ERROR: The OutputVar should not be blank, please check it again.;
  19.     %goto exit;
  20. %end;

  21. %global &OutputVar;

  22. /* 开始进行计算 */
  23. %if %UPCASE(&Type) EQ PATH %then %do;
  24.         %let &OutputVar=%QSUBSTR(%SYSGET(SAS_EXECFILEPATH),1,%LENGTH(%SYSGET(SAS_EXECFILEPATH))-%LENGTH(%SYSGET(SAS_EXECFILENAME)));
  25. %end;
  26. %else %if %UPCASE(&Type) EQ FULLPATH %then %do;
  27.         %let &OutputVar=%SYSGET(SAS_EXECFILEPATH);
  28. %end;
  29. %else %if %UPCASE(&Type) EQ FILENAMEANDEXT %then %do;
  30.         %let &OutputVar=%SYSGET(SAS_EXECFILENAME);
  31. %end;
  32. %else %if %UPCASE(&Type) EQ FILENAME %then %do;
  33.         %let &OutputVar=%QSUBSTR(%SYSGET(SAS_EXECFILENAME),1,%LENGTH(%SYSGET(SAS_EXECFILENAME))-%LENGTH(%SCAN(%SYSGET(SAS_EXECFILENAME),-1,%STR(.)))-1);
  34. %end;

  35. %exit:
  36. %mend;
复制代码




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:相对路径 Sensitive filename include CURRENT 中实 相对路径 引用 sas

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 160  论坛币 + 160  学术水平 + 10  热心指数 + 10  信用等级 + 10   查看全部评分

本帖被以下文库推荐

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

沙发
niuniuyiwan 在职认证  发表于 2015-11-10 11:16:54
感谢分享
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

藤椅
xddlovejiao1314 学生认证  发表于 2015-11-10 11:47:22
好贴,谢谢分享。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 17:42