SAS中文论坛

标题: 请教一个字符型变量的问题 [打印本页]

作者: shiyiming    时间: 2012-4-14 15:28
标题: 请教一个字符型变量的问题
10181800058-2        7.46
10181800059-0        5.98
10181800059-2        7.9
10181800060-0        5.15
10181800060-2        5.29
10181800061-0        8.89
10181800061-2        20.34
10181800062-0        5.47
10181800062-2        8.49
10181800063-0        5
10181800063-2        6.42
10181800064-0        5.83
10181800064-2        11.01
10181800065-0        5.7
10181800065-2        4.89
10181800066-0        5.4
数据集中数据如上,左边变量为id,为字符型变量,右边为glu。
第一,怎么把id中的101818000**两个18变成一个18,即1018000**。
第二,由于一个ID分别对应两个观测-0和-2,怎么把每个id的两个观测glu分别变成两个变量glu1和glu2, 若是-0,则id为101800065, glu1=glu,  若是-2,id同样为101800065,glu2=glu.
望高手不吝赐教,本人菜鸟。
作者: shiyiming    时间: 2012-4-15 12:32
标题: Re: 请教一个字符型变量的问题
[code:1m5rsf9s]data raw;
    input oldid :$20. glu;
datalines;
10181800058-2 7.46
10181800059-0 5.98
10181800059-2 7.9
10181800060-0 5.15
10181800060-2 5.29
10181800061-0 8.89
10181800061-2 20.34
10181800062-0 5.47
10181800062-2 8.49
10181800063-0 5
10181800063-2 6.42
10181800064-0 5.83
10181800064-2 11.01
10181800065-0 5.7
10181800065-2 4.89
10181800066-0 5.4
;
data _null_;
    length id $20;
    if _n_=1 then do;
        declare hash h(hashexp:8,ordered:'a');
        rc=h.defineKey('id');
        rc=h.defineData('id','glu1','glu2');
        rc=h.defineDone();
        call missing(id,glu1,glu2);
    end;
    set raw end=last;
    id=cats('10',substr(oldid,5,7));
    rc=h.find();
    select(scan(oldid,-1,'-'));
        when('0') glu1=coalesce(glu,glu1);
        when('2') glu2=coalesce(glu,glu2);
        otherwise;
    end;
    if rc then rc=h.add();
    else rc=h.replace();
    if last then rc=h.output(dataset:'out');
run;[/code:1m5rsf9s]
作者: shiyiming    时间: 2012-4-20 22:38
标题: Re: 请教一个字符型变量的问题
[code:2dfduh79]data a;
input id $13. glu;
length id $11.;
id=compress(substr(id,1,2)||substr(id,5,7));
cards;
10181800058-2 7.46
10181800059-0 5.98
10181800059-2 7.9
10181800060-0 5.15
10181800060-2 5.29
10181800061-0 8.89
10181800061-2 20.34
10181800062-0 5.47
10181800062-2 8.49
10181800063-0 5
10181800063-2 6.42
10181800064-0 5.83
10181800064-2 11.01
10181800065-0 5.7
10181800065-2 4.89
10181800066-0 5.4
;
proc transpose data=a out=b(drop=_name_) prefix=glu;
var glu;
by id;
run;[/code:2dfduh79]
作者: shiyiming    时间: 2012-4-21 00:30
标题: Re: 请教一个字符型变量的问题
假设你的观测除了0都算2;

data test1;
input #1 id $ 1-11  s 13   Glu1 15-19  @;
        if s eq 0 then do;               
           input #2  Glu2 15-19; ID=substr(id,1,2)||substr(id,5); output;
        end;
        else do; Glu2=Glu1;glu1=.;ID=substr(id,1,2)||substr(id,5);output;end;
drop s;
cards;
10181800058-2 7.46
10181800059-0 5.98
10181800059-2 7.9
10181800060-0 5.15
10181800060-2 5.29
10181800061-0 8.89
10181800061-2 20.34
10181800062-0 5.47
10181800062-2 8.49
10181800063-0 5
10181800063-2 6.42
10181800064-0 5.83
10181800064-2 11.01
10181800065-0 5.7
10181800065-2 4.89
10181800066-0 5.4
;
run;
作者: shiyiming    时间: 2012-5-21 14:55
标题: Re: 请教一个字符型变量的问题
三种方法都很强悍!只是hopewell的方法不太懂!




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2