全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2639 6
2013-02-21
悬赏 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; ...
二维码

扫码加我 拉你入群

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

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

全部回复
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;


二维码

扫码加我 拉你入群

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

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

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

怎么把悬赏赏给自己,还有没有很简单的方法?
二维码

扫码加我 拉你入群

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

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

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;

二维码

扫码加我 拉你入群

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

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

2013-2-22 19:09:19
countw是个非常好用的函数
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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