楼主: markshe
556 2

[问答] 如何通过宏简化下述过程 [推广有奖]

  • 0关注
  • 1粉丝

博士生

31%

还不是VIP/贵宾

-

威望
0
论坛币
2145 个
通用积分
19.6006
学术水平
1 点
热心指数
2 点
信用等级
0 点
经验
2257 点
帖子
94
精华
0
在线时间
458 小时
注册时间
2004-7-15
最后登录
2024-2-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

如何通过宏简化下述过程

我有一个宏%sort(name=,list=),希望能作用于几个不同的变量字符串

%sort(name=valuation,vars=&valuation);

%sort(name=asset,vars=&asset);

%sort(name=risk,vars=&risk);

……

其中&valuation&asset等是变量字符串

%let valuation=pb g_pe o_pe t_pe o_pcf t_pcf tg_peg to_peg

				tt_peg sg_peg so_peg st_peg pwc i1_pb;

  

%let asset=lev_inv lev_cur_a lev_fix_a lev_ap lev_cur_l

			lev_longd lev_tot_l lev_stock lev_re lev_tot_e;

因为一共有七个大类,我希望能简化成

%let factorname=valuation asset risk;

%let factor=&valuation &asset &risk;

%macro(name=factorname,list=&factor);

的形式

单独做到循环调用factorname是好实现的,

这里面主要的问题是需要同一个字符可以作为两种宏变量

既可以作为字符valuation,也可以作为宏变量&valuation调用字符串序列

因为对宏的语法不熟悉,这个需求也不好描述,网上没有搜到相关内容

二维码

扫码加我 拉你入群

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

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


已有 1 人评分学术水平 收起 理由
eijuhz + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1   查看全部评分

沙发
whymath 发表于 2019-9-16 22:49:58 |只看作者 |坛友微信交流群
那么就在文本前使用字符函数加上解析符号 &
如下测试:
  1. %let valuation = 1 2 3;
  2. %let asset = one two three;
  3. %let risk = α β γ;

  4. %let factorname=valuation asset risk;
  5. %let factor=&&%sysfunc(tranwrd(&factorname,%str( ),%nrstr( &)));

  6. %put &=factorname;
  7. %put &=factor;
复制代码

将输出结果:
  1. FACTORNAME=valuation asset risk
  2. FACTOR=1 2 3 one two three α β γ
复制代码

使用道具

藤椅
markshe 发表于 2020-1-13 16:01:51 |只看作者 |坛友微信交流群
whymath 发表于 2019-9-16 22:49
那么就在文本前使用字符函数加上解析符号 &
如下测试:
太感谢了

使用道具

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

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

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

GMT+8, 2024-4-20 06:26