楼主: playmore
1856 3

[程序分享] SAS基础宏之6:ChkVarFormat [推广有奖]

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

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

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
用来检查数据格式的
好像SAS没有判断日期变量的好办法,只能看格式是不是DATE9.,YYMMDD之类的了
如果有其他办法,记得通知我

  1. %macro ChkVarFormat(SourceTable,InputVar,FlagVarFormat);

  2. /**********************************************************************/
  3. /* 此宏的作用是检查某数据表中指定变量的格式,如日期格式YYMMDD10.和字 */
  4. /* 符串格式$40.。其中,SourceTable是原始表格;InputVar是指定的变量, */
  5. /* 若为多个变量,请用空格分隔;FlagVarFormat是标记宏变量名称,若有多 */
  6. /* 个InputVar变量,则用小数点分隔。 */
  7. /* */
  8. /* 最终得到的是宏变量&FlagVarFormat。 */
  9. /* */
  10. /* Created on 2012.9.7 */
  11. /* Modified on 2012.9.18 */
  12. /**********************************************************************/

  13. %if %SYSFUNC(FIND(&SourceTable,.)) NE 0 %then %do;
  14. %let CVF_LibName=%UPCASE(%SCAN(&SourceTable,1,.));
  15. %let CVF_MemName=%UPCASE(%SCAN(&SourceTable,2,.));
  16. %end;
  17. %else %do;
  18. %let CVF_LibName=WORK;
  19. %let CVF_MemName=%UPCASE(&SourceTable);
  20. %end;

  21. %ChkDataSet(DataSet=&CVF_LibName..&CVF_MemName,FlagDataSetExists=CVF_FlagDataSetExists);

  22. %if &CVF_FlagDataSetExists EQ 1 %then %do;
  23. %ChkVar(SourceTable=&SourceTable,InputVar=&InputVar,FlagVarExists=CVF_FlagVarExists);

  24. %if %SYSFUNC(FIND(&CVF_FlagVarExists,0)) EQ 0 %then %do;
  25. proc contents data=&SourceTable out=CVF_temp(keep=NAME TYPE FORMAT FORMATL) noprint;
  26. run;

  27. %global &FlagVarFormat;

  28. %if %SYSFUNC(FIND(&InputVar,%STR( ))) NE 0 %then %do;
  29. %SeparateString(InputString=&InputVar,OutputString=CVF);

  30. %do CVF_i=1 %to &CVF_Num;
  31. %let CVF_FlagVarExists&CVF_i=0;

  32. data _null_;
  33. set CVF_temp;
  34. if UPCASE(NAME)=UPCASE("&&CVF_Var&CVF_i.") then do;
  35. call symputx("CVF_FlagVarFormat&CVF_i",FORMAT);
  36. call symputx("CVF_FlagVarFormatL&CVF_i",FORMATL);
  37. end;
  38. run;
  39. %end;

  40. %let &FlagVarFormat=&&CVF_FlagVarFormat1.&&CVF_FlagVarFormatL1;

  41. %do CVF_j=2 %to &CVF_Num;
  42. %let &FlagVarFormat=&&&FlagVarFormat.%STR(.)&&CVF_FlagVarFormat&CVF_j&&CVF_FlagVarFormatL&CVF_j;
  43. %end;
  44. %end;
  45. %else %do;
  46. data _null_;
  47. set CVF_temp;
  48. if UPCASE(NAME)=UPCASE("&InputVar.") then do;
  49. call symputx("CVF_FlagVarFormat",FORMAT);
  50. call symputx("CVF_FlagVarFormatL",FORMATL);
  51. end;
  52. run;

  53. %let &FlagVarFormat=&CVF_FlagVarFormat.&CVF_FlagVarFormatL;
  54. %end;
  55. %end;
  56. %else %do;
  57. %put ERROR: There is no variable named %SCAN(&InputVar,%SYSFUNC(FIND(&CVF_FlagVarExists,0))), please check it again.;
  58. %goto exit;
  59. %end;
  60. %end;
  61. %else %if &CVF_FlagDataSetExists EQ 0 %then %do;
  62. %put ERROR: The DataSet "&SourceTable." does not exist, please check it again.;
  63. %goto exit;
  64. %end;
  65. %else %do;
  66. %put ERROR: There may be something wrong with the macro ChkDataSet, please contact the writer for help.;
  67. %goto exit;
  68. %end;

  69. /* 若要显示&FlagVarFormat的值,请取消下面的注释 */
  70. /*%put &FlagVarFormat=&&&FlagVarFormat;*/

  71. /* 删除不必要的表格 */
  72. proc delete data=CVF_temp;
  73. run;

  74. %exit:
  75. %mend;


  76. %macro Demo();

  77. %let SourceTable=AOQR_DetHoldingsOfFund_Chosen;
  78. %let InputVar=End_Date Fund_Name Fund_Code;
  79. %let FlagVarFormat=FlagVarFormat1;
  80. %ChkVarFormat(&SourceTable,&InputVar,&FlagVarFormat);

  81. %mend;
复制代码

二维码

扫码加我 拉你入群

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

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

关键词:ChkVarFormat format FORMA sas基础 Rfor 基础

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

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

本帖被以下文库推荐

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛
沙发
webgu 发表于 2013-4-16 08:42:26 |只看作者 |坛友微信交流群
很用心啊,以后得自己专门总结特定的宏。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

使用道具

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-8 11:25