楼主: Imasasor
1246 4

求高手帮忙写个宏 [推广有奖]

  • 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 发表于 2012-9-9 22:16:41 |AI写论文
5论坛币
proc format;
value group low-1='l小于1'
            1.1-2='1-2'
                        2.1-3='2-3'
                        3.1-4='3-4'
                        4.1-5='4-5'
                        5.1-6='5-6'
                        6.1-7='6-7'
                        7.1-8='7-8'
                        8.1-9='8-9'
                        9.1-10='9-10'
                        10.1-11='10-11'
                        11.1-12='11-12'
                        12.1-13='12-13'
                        13.1-14='13-14'
                        14.1-high="大于14"
                        ;
                        run;

如上例,就是format对变量的一个分组程序,是为了以后用。
上例中,第一组上限是1,最后一组下限是14,组间隔为1,现在我想做一个宏程序,定义三个参数,下限为low 上限为high,间隔为interval
如当low=2, high=16, interval=2时,就是  low-2="小于2"  2.1-4='2-4'   4.1-6='4-6'  ........  16.1-high="大于16"
求高手,这个宏怎么写

最佳答案

nomad5 查看完整内容

%macro l_format(name=,low=,high=,interval=); data l_a; do i=&low. to %sysevalf(&high.-&interval.) by &interval.; var1=catx('',i+0.1,'-',i+&interval.) ; var2=catx('',i,'-',i+&interval.); output; end; run; data _null_; set l_a end=final; call symput('name'||strip(_n_),catx('',var1,'=','"',var2,'"')); ...
关键词:求高手 Interval format inter FORMA 程序

回帖推荐

nomad5 发表于5楼  查看完整内容

%macro l_format(name=,low=,high=,interval=); data l_a; do i=&low. to %sysevalf(&high.-&interval.) by &interval.; var1=catx('',i+0.1,'-',i+&interval.) ; var2=catx('',i,'-',i+&interval.); output; end; run; data _null_; set l_a end=final; call symput('name'||strip(_n_),catx('',var1,'=','"',var2,'"')); ...
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
nomad5 发表于 2012-9-9 22:16:42
%macro l_format(name=,low=,high=,interval=);

    data l_a;
        do i=&low. to %sysevalf(&high.-&interval.) by &interval.;
            var1=catx('',i+0.1,'-',i+&interval.) ;
            var2=catx('',i,'-',i+&interval.);
            output;
        end;
    run;

    data _null_;
        set l_a end=final;
        call symput('name'||strip(_n_),catx('',var1,'=','"',var2,'"'));
        if final then call symput('num',strip(_n_));
    run;

    proc format;
        value &name.
        low - &low. = "小于&low."
            %do i=1 %to &num.;
                &&name&i..
            %end;
        %sysevalf(&high.+0.1) - high = "大于&high.";
    run;

    proc delete data=l_a; run;
%mend;
%l_format(name=group,low=3,high=16,interval=0.5);

data a;
    input a;
    cards;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    16.1
    ;
run;

data b;
    set a;
    b=put(a,group.);
run;

藤椅
可~乐 发表于 2012-9-10 00:48:21


%macro test(low,high,interval);

%let var1=low-&low.="小于&low."; %put &var1.;/*头的形式*/

/*中间循环变化形式*/
%do i=&low. %to %eval(&high.-&interval.) %by &interval.;

        %let var2=%sysevalf(&i.+0.1)-%sysevalf(&i.+&interval.)="&i.-%sysevalf(&i+&interval.)";%put &var2.;
        %let var1=&var1. &var2.;%put &var1.;

%end;

%let var2=%sysevalf(&high.+0.1)-high="大于&high.";/*尾的形式*/

&var1. &var2.;

%mend;

/*定义format*/
proc format;
value group %test(2,16,2);
run;;

/*测试*/
data test;
x=2.2;output;
x=7;output;
x=11.1;output;
x=8.6;output;
x=16;output;
x=17;output;
format x group.;
run;

板凳
nomad5 发表于 2012-9-10 12:46:46
%macro l_format(name=,low=,high=,interval=);
    proc format;
        value &name.
        low - &low. = "小于&low."

        %do i=&low. %to %eval(&high.-&interval.) %by &interval.;
            %let j=%eval(&i. + &interval.);

            &i..1 - &j. = "&i.-&j."

        %end;

        &high..1 - high = "大于&high."
    ;
    run;
%mend;
%l_format(name=group,low=3,high=18,interval=3);

data a;
    input a 8.;
    cards;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    16.1
    ;
run;

data b;
    set a;
    b=put(a,group.);
run;

报纸
Imasasor 发表于 2012-9-11 09:59:04
nomad5 发表于 2012-9-10 12:46
%macro l_format(name=,low=,high=,interval=);
    proc format;
        value &name.
高手,这个宏的interval如果不是整数就不行,请问怎么改一下,可以使interval为小数,如0.5
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

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

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