楼主: playmore
12416 6

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

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

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

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

楼主
playmore 发表于 2013-3-21 08:56:36 |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 中实

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

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

本帖被以下文库推荐

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

沙发
kamchao 发表于 2013-4-18 18:51:29
谢谢总结

藤椅
leptonyu 发表于 2013-7-11 00:41:09
不幸的是EXECFILEPATH和EXECFILENAME仅仅是增强型编辑器的环境变量,对于批处理方式无效

板凳
playmore 发表于 2013-7-11 10:56:36
leptonyu 发表于 2013-7-11 00:41
不幸的是EXECFILEPATH和EXECFILENAME仅仅是增强型编辑器的环境变量,对于批处理方式无效
嗯,应该是
大牛有其他好办法吗?
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

报纸
leptonyu 发表于 2013-7-11 18:24:11
没有 windows下 反正都是增强型编辑器里面运行 够用了

地板
zhou.wen 发表于 2013-7-12 09:40:05
修改cfg文件,SAS9.3通常在目录C:\Program Files\SASHome\SASFoundation\9.3\nls\zh下sasv9.cfg,在文件末尾增加下面语句可以配置你的环境,比如宏目录设置,格式,逻辑库等,‘.’表示相对路径,也就是你的大工程文件下要复制这个cfg文件
  1. -INITSTMT '        libname myauto "./AUTO_RUN";
  2.                         options MSTORED SASMSTORE=myauto fmtsearch=(myauto) noxwait noxsync;
  3.                         libname datadir "./DataDir";
  4.                         libname syslib "./WorkDir";
  5.                         libname worklib "./ModelDir/work";
  6.                         libname temp "./ModelDir/temp";'
复制代码
最后用批处理的方式启动sas,autoexe.bat代码如下(这个文件也需要在你的大工程目录下,sas.exe文件可能要根据你sas安装的具体位置改动,这里以sas9.3默认位置为例):
  1. "C:\Program Files\SASHome\SASFoundation\9.3\sas.exe" -config "%cd%\sasv9.cfg"
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
webgu + 40 + 60 + 1 + 1 + 1 呵呵,一直很少动CFG文件。
playmore + 1 + 1 + 1 精彩帖子

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

Practice Is The Best Teacher!

7
gaotao0727 发表于 2015-11-29 14:09:12
这方法可以实现真的很赞,但是我这运行还有有问题呢,您可以分别就这四种情形,=Path,=FullPath,=FileNameAndExt,=FileName,给我演示一下如何运行吗?
这个宏是用于变相得到相对路径引用,为什么还是输入Type这个路径或者文件名呢?
谢谢大牛~~~

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 11:10