SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1967|回复: 5
打印 上一主题 下一主题

求教一个code

[复制链接]

11

主题

49

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
跳转到指定楼层
楼主
发表于 2015-5-2 12:59:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
data a;

input code $ map;

cards;



10001F 200

    .      140

    .      205

   1300 290

    .     230

    .      350

200015 102

20009 201

   .       700

   .      505

     240 300

     .     220

50010H 300

      .    209

  ;


run;
有个data a如上所示. 我想把这个missing values补齐成如下data b(规则:1,code不足六位数的,通过添加前置0补齐6位. 2,如果code有missing,则延用上一行的code值):
data b;

input code $ map;

cards;



10001F 200

10001F 140

10001F 205

001300 290

001300 230

001300 350

200015 102

020009 201

020009 700

020009 505

000240 300

000240 220

50010H 300

50010H 209

  ;


run;


谢谢!





分享到:  微信微信
收藏收藏
回复

使用道具 举报

2

主题

13

帖子

40

积分

新手上路

Rank: 1

积分
40
推荐
发表于 2016-5-17 23:45:59 | 只看该作者
I am sorry that the number of 5 was a typo. The correct Data Step is:
data Bio_SAS (drop=Temp);
length Code $6;
infile datalines dlm=",";
retain Code;
input Temp : $6. Map;
if Temp ne " " then Code=Repeat("0",6-length(Temp))||strip(Temp);
datalines;
10001F,200
        ,140
        ,205
1300  ,290
        ,230
        ,350
200015,102
20009 ,201
        ,700
        ,505
240   ,300
        ,220
50010H,300
        ,209
;
run;
回复 支持 1 反对 0

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
推荐
发表于 2015-5-25 16:38:27 | 只看该作者
data b;
set a;
format code1 $6.;
if code^="" then do;
code1=code;
retain code1;
end;
code2="000000"||code1;
code3=substr(code2,length(code2)-5,6);
keep code3 map;
rename code3=code;
run;
回复 支持 1 反对 0

使用道具 举报

0

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
沙发
发表于 2015-5-8 09:37:54 | 只看该作者
笑纳:

data a(drop=code_t);
infile cards missover;
retain code;
        input code_t $6. map;
       if not missing(code_t) then code=code_t;
        select(length(code));
                when (1) code=cats("00000",code);
                when (2) code=cats("0000",code);
                when (3) code=cats("000",code);
                when (4) code=cats("00",code);
                when (5) code=cats("0",code);
                        otherwise;
        end;

cards;
10001F 200
       140
       205
1300   290
       230
       350
200015 102
20009  201
       700
       505
240    300
       220
50010H 300
       209
;
run;
回复 支持 反对

使用道具 举报

2

主题

13

帖子

40

积分

新手上路

Rank: 1

积分
40
地板
发表于 2016-5-17 06:07:21 | 只看该作者
data Bio_SAS (drop=Temp);
length Code $6;
infile datalines dlm=",";
retain Code;
input Temp : $6. Map;
if Temp ne "" then Code=Repeat("0",5-length(Temp))||strip(Temp);
datalines;
10001F,200
       ,140
       ,205
1300  ,290
       ,230
       ,350
200015,102
20009 ,201
       ,700
       ,505
240   ,300
       ,220
50010H,300
       ,209
;
run;
回复 支持 反对

使用道具 举报

0

主题

3

帖子

14

积分

新手上路

Rank: 1

积分
14
5#
发表于 2016-5-17 20:30:29 | 只看该作者
2楼的我支持
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2024-4-20 07:55 , Processed in 0.128904 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表