全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2937 5
2013-02-24
悬赏 100 个论坛币 已解决
首先祝进来的朋友元宵节快乐!!

想问坛友一个细节的问题,如下:

复制代码

我原意是想从宏变量引入带有逗号的数值串,但是scan不识别,请问该怎么修改呢?谢谢。

最佳答案

Imasasor 查看完整内容

%macro abc(rm,tm); %let rm=%bquote(1.2,1,2,3,4,5,4); %let tm=%substr(&tm,2,%length(&tm)-2); %put &rm; *这两个变量put出来显示是一样的; %put &tm; %do i=1 %to 5; %let rv&i=%scan(&rm,&i,%str(,)); %let tv&i=%scan(%bquote(&tm),&i,%str(,)); *报错; %put &&rv&i &&tv&i; %end; %mend; %abc(%bquote(3,2.8,2.6,2.4,2.2,2.0,1.8),%bquote(3,2.7,2.4,2.1,1.8,1.5,1.2)); 你宏中的 ...
二维码

扫码加我 拉你入群

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

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

全部回复
2013-2-24 20:41:52
%macro abc(rm,tm);

%let rm=%bquote(1.2,1,2,3,4,5,4);
%let tm=%substr(&tm,2,%length(&tm)-2);

%put &rm;   *这两个变量put出来显示是一样的;
%put &tm;

%do i=1 %to 5;
  %let rv&i=%scan(&rm,&i,%str(,));
  %let tv&i=%scan(%bquote(&tm),&i,%str(,));   *报错;

  %put &&rv&i &&tv&i;
%end;
%mend;

%abc(%bquote(3,2.8,2.6,2.4,2.2,2.0,1.8),%bquote(3,2.7,2.4,2.1,1.8,1.5,1.2));


你宏中的参数rm是没有用的,你在宏中直接重新定义其值了
二维码

扫码加我 拉你入群

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

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

2013-2-24 20:59:35
%macro abc(rm,tm);

%let rm=%str(1.2,1,2,3,4,5,4);
%let tm=%substr(&tm,2,%length(&tm)-2);

data aa;
rm=symget('rm');
call symput('rm',rm);   *①如果把rm放入data步中洗一下;
run;

%put &rm;   *这两个变量put出来显示是一样的;
%put &tm;

%do i=1 %to 5;
  %let rv&i=%scan(&rm,&i,',');   *②这时rm也报错了,若没有上面的data步,则这步不报错;
  %let tv&i=%scan(&tm,&i,',');   *报错;
  %put &&rv&i &&tv&i;
%end;

%mend;

%abc("3,2.8,2.6,2.4,2.2,2.0,1.8","3,2.7,2.4,2.1,1.8,1.5,1.2");
二维码

扫码加我 拉你入群

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

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

2013-2-24 22:40:56
There is no variable type in SAS macro language. All of them is 'text'.

If you can formulate the problem as what do you have and what do you want + your sas code, it will help others to understand the problem better, and to offer better solutions.
二维码

扫码加我 拉你入群

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

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

2013-2-24 23:11:36
bobguy 发表于 2013-2-24 22:40
There is no variable type in SAS macro language. All of them is 'text'.

If you can formulate the ...
bob老师元宵节快乐,您说的很对,我忽略宏变量的本意了;

我这样只是想方便模拟时在整个宏的下方调用时控制组间的均数情况。
二维码

扫码加我 拉你入群

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

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

2013-2-24 23:16:09
Imasasor 发表于 2013-2-24 22:45
%macro abc(rm,tm);

%let rm=%bquote(1.2,1,2,3,4,5,4);
是的,怪我没有阐述明白,本来想用tm这条路实现rm和tm两个组,但是发现行不通,我就按原来的方法把rm的路截断了。

您的方法很有启示,谢谢。顺祝版主元宵快乐。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群