SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

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

如何分别数多个变量的个数

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-4-20 04:31:14 | 只看该作者

如何分别数多个变量的个数

sas-data-set 如下:

Id          year        a01        a02         a03        a11         a12         a13         a14         a15
001       2001        3           2              9           .A           6            .A           .A           12
001       2002        .A          6             10          .a           24          .              4             7
001       2003         .a         5             .a           .a          6              8            .a           11
002       2002         3           6            5             .a          .a            12            8           14
006       2001         3           .a          .a            9            .a            12           9            15
......
......

如何用一个简单的程序数出变量a01-a15中缺失值“.A”(SAS不区分大小写)的总个数?即:
   变量名:   a01      a02         a03        a11         a12         a13         a14         a15

.A的总数:    2          1              2            4            2            1              2            0

真实文件中约 100个变量。

预览了一下, 发现没有对齐。 最后两行的意思是程序的结果:变量a01有两个.A,a02有一个,a03有两个, a11有四个,a12有两个,a13有一个,a14有两个以及a15有0个。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-4-21 11:33:56 | 只看该作者

Re: 如何分别数多个变量的个数

/*数据集*/
data b;
input Id year a01$ a02$ a03$;
cards;
001 2001 3 2 .a
001 2002 .a 6 .a
001 2003 .a 5 .a
002 2002 3 6 7
006 2001 3 .a 8
;
run;
/*构造新变量*/
data bb;
set b;
array  arr a01-a03;
array num b01-b03;
do i=1 to 3;
if arr(i)='.a' then num(i)=1;
else num(i)=0;
end;
drop i;
run;
/*计算个数*/
proc means data=bb;
var b01 b02 b03;
output out=bb1 sum=;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-4-21 19:54:54 | 只看该作者

Re: 如何分别数多个变量的个数

[size=200:328x35kq][color=#FF0000:328x35kq][管理员注] 咦?!我记得这里原来是有一段代码的,那段代码呢?[/color:328x35kq][/size:328x35kq]
[code:328x35kq]
data a;
input Id$ year a01 a02 a03 a11 a12 a13 a14 a15;
cards;
001 2001 3 2 9 .A 6 .A .A 12
001 2002 .A 6 10 .a 24 . 4 7
001 2003 .a 5 .a .a 6 8 .a 11
002 2002 3 6 5 .a .a 12 8 14
006 2001 3 .a .a 9 .a 12 9 15
;
run;

data b(drop=id year cnt1--cnt8 i);
        set a end=last;
        array r{8} a01--a15;
        array cnt{8};
        retain cnt1-cnt8 0;
        do i=1 to 8;
                if r(i)=.A then cnt(i)+1;
        end;
        if last then do;
                do i=1 to 8;
                        r(i)=cnt(i);
                end;
                output;
        end;
run;
[/code:328x35kq]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-4-27 04:08:33 | 只看该作者

Re: 如何分别数多个变量的个数

谜面:告别烟酒生与巧克力较量, 告别烟酒生赢了。

谜底:告别烟酒生[color=#0000FF:nx2igufk][b:nx2igufk]棒[/b:nx2igufk][/color:nx2igufk]。

脱帽致敬!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-4-28 17:01:24 | 只看该作者

Re: 如何分别数多个变量的个数

[code:y03rojcz]
proc means data=te2 noprint;
        var _numeric_ ;
        output out=a(keep=a:) nmiss=;
run;
[/code:y03rojcz]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-4-30 07:18:57 | 只看该作者

Re: 如何分别数多个变量的个数

Dear lwien001,

你的程序试过了,虽然很精湛, 但没有达到要求的效果。
题目中要求的是数出各个变量缺失值".A"的个数,你的结果不仅包括缺失值“.A”,还包括缺失值“.”。
拿我的数据测了一下,本应只有几十个所要的缺失值,而加上“.”后,就变成了几万个了。
你看能否改一下?多谢参与,让我很快乐。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 18:17 , Processed in 0.079834 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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