SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1016|回复: 1
打印 上一主题 下一主题

catx() function question in macro

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-5-4 04:19:38 | 只看该作者

catx() function question in macro

我想得到mkt的任意组合值(根据ss给出的组合数字),比如ss=(1 4),那么我想得到mkts=(m1 m4); 比如ss=4,那么我想得到mkts=m4;
比如ss=(1 3 4),那么我想得到mkts=(m1 m3 m4); 如果marks有超过1个以上值时,请用空格隔开.
下面的code却总出现error,好像是catx()在macro里的用法有误,请高手指教,或者给出你的code。

data a;
input unid $ sales mkt $;
cards;
001 34500 m1
001 4500  m2
001 60900 m3
001 1000  m4
002 26600 m1
002 1400  m2
002 59000 m3
002 1300  m4
003 2000  m2
003 17900 m3
004 23000 m1
;
run;
%macro a(ss=);
%let s1=%str(m1 m2 m3 m4);
%let mkts='';

%let n=%sysfunc(countw(&ss.));
%do i=1 %to &n.;
%do j=1 %to 4;
  %if %scan(%str(&ss.),&i.)=&j. %then %do;
   %let mkts=%sysfunc(catx('',&mkts.,%scan(&s1.,&j.)));
  %end;
%end;
%end;

%put mkts=&mkts.;
%mend;

%a(ss=1 3)

谢谢!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-5-5 10:20:28 | 只看该作者

Re: catx() function question in macro

等更完备的方法
[code:t50llkrd]data _null_;
    str='(111 222 333 444)';
    out=cats('(',prxchange('s/(\(|\s+)/ m/',-1,str));
    put out;               
run;[/code:t50llkrd]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-6 12:51 , Processed in 0.091797 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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