楼主: Imasasor
2690 6

怎么将宏变量倒转过来? [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2024-10-10

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

楼主
Imasasor 发表于 2013-2-21 16:37:06 |AI写论文
108论坛币
%let a=you are how;
怎么生成宏变量b变成 how are you
求助...........

最佳答案

bouluo505 查看完整内容

方法太多了,提供两个思路 1:按一个记录读进去,然后while kscan按空格分隔输出,最后将数据库按ID倒序 输出; 2:直接按空格分别读进去,然后倒序输出; 大概写了下,仅作参考 data demo(drop=words); infile datalines dlm=","; length words $ 100; input words $; i=1; do while (kscan(words,i,' ' )^=''); word=kscan(words,i,' '); output; i+1; end; ...
关键词:ARE How You let
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
bouluo505 发表于 2013-2-21 16:37:07
方法太多了,提供两个思路
1:按一个记录读进去,然后while kscan按空格分隔输出,最后将数据库按ID倒序 输出;
2:直接按空格分别读进去,然后倒序输出;

大概写了下,仅作参考

    data demo(drop=words);
    infile datalines dlm=",";
    length words $ 100;
    input  words $;
     i=1;
    do while (kscan(words,i,' ' )^='');
       word=kscan(words,i,' ');
      output;
       i+1;
    end;
    datalines;
    how are you now  fine
    ;

    proc sort data=demo  out=want (keep=word);
       by descending i;
    run;


已有 1 人评分经验 论坛币 热心指数 收起 理由
webgu + 60 + 10 + 1 鼓励积极发帖讨论

总评分: 经验 + 60  论坛币 + 10  热心指数 + 1   查看全部评分

藤椅
Imasasor 发表于 2013-2-21 16:45:04
%macro inverse;
%let name=you are how;
%let i=1;
%let var=1;
%do %while(&var^=);
%let var=%scan(&name,&i);
%if &i=1 %then %do;
%let name1=;
%end;
%let name1=&var &name1  ;
%let i=%eval(&i+1);
%end;
%put &name1;
%mend;

%inverse

怎么把悬赏赏给自己,还有没有很简单的方法?
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 这个效率应该也还可以的。

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

板凳
playmore 发表于 2013-2-22 09:32:29
简单查了下,SAS的REVERSE函数只能反字母,不能反单词,变通了下,效率应该还可以

%macro ReverseString(InputString,OutputString);

%let InputString_Temp=%SYSFUNC(REVERSE(&InputString));
%let &OutputString=;

%do i=1 %to %EVAL(%SYSFUNC(COUNT(&InputString,%STR( )))+1);
        %let &OutputString=&&&OutputString. %SYSFUNC(REVERSE(%SCAN(&InputString_Temp,&i)));
%end;

%mend;

%let InputString=you are how;
%let OutputString=a;
%ReverseString(&InputString,&OutputString);

%put &a;

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

报纸
hamsik11 发表于 2013-2-22 19:09:19
countw是个非常好用的函数

地板
Bridgenc 发表于 2013-2-22 21:17:25
Try this:

%let a=you are how;
%put &a;

data b;
format d $100.;
k=countw("&a");
do i=1 to k;
   c=" "||scan("&a",-i," ");
   d=catt(d,c);
end;
run;

proc sql;
  select d into :reverse from b;
quit;

%put &reverse;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 countw

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
bobguy 发表于 2013-2-23 10:24:08
Here is a little clear version.

%macro inverse(varlist=you are how);

%let n= %eval(%sysfunc(countc(%cmpres(&varlist),%str( )))+ (%length(&varlist) gt 0) );
%let name1=;
%do i=&n %to 1 %by -1;
        %let name1=&name1 %scan(&varlist,&i) ;
%end;
&name1;
%mend;

%let rev_var=%inverse(varlist=you are how);

%put <varlist=you are how> <rev_var=&rev_var>;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 17:56