SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 4931|回复: 13
打印 上一主题 下一主题

多个变量里查找某个值出现的次数

[复制链接]

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
跳转到指定楼层
楼主
发表于 2014-4-14 20:56:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
A1 A2 A3 A4 A5
x   y   z    x   y
y   z    x   y   x
z   y   x   z     y
假设这样个数据集 统计出x、y、z分别出现的次数 怎么写应该
最后得到x=5 y=6 z=4 这样的结果

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

使用道具 举报

2

主题

18

帖子

441

积分

中级会员

Rank: 3Rank: 3

积分
441
推荐
发表于 2014-4-15 09:34:59 | 只看该作者
  1. data raw;
  2.     input (A1 A2 A3 A4 A5) ($);
  3. datalines;
  4. x y z x y
  5. y z x y x
  6. z y x z y
  7. ;
  8. data _null_;
  9.     length var $8;
  10.     if _n_=1 then do;
  11.         declare hash h(hashexp:4,ordered:'y');
  12.         rc=h.definekey('var');
  13.         rc=h.definedata('var','count');
  14.         rc=h.definedone();
  15.         call missing(var,count);
  16.     end;
  17.     set raw end=last;
  18.     array a $ a1-a5;
  19.     do over a;
  20.         if h.find(key:a) then rc=h.add(key:a,data:a,data:1);
  21.         else do;
  22.             count+1; rc=h.replace();
  23.         end;
  24.     end;
  25.     if last then rc=h.output(dataset:'out');
  26. run;
复制代码
回复 支持 1 反对 0

使用道具 举报

0

主题

2

帖子

24

积分

新手上路

Rank: 1

积分
24
推荐
发表于 2014-4-14 21:14:07 | 只看该作者
***CASE;
data a;
input (A1 A2 A3 A4 A5) ($);
cards;
x   y   z    x   y
y   z    x   y   x
z   y   x   z    y
;
run;

DATA A;
SET A END=T;
array a{*} a1-a5;
do i=1 to dim(A);
NX+COUNT(UPCASE(A(I)),'X');
NY+COUNT(UPCASE(A(I)),'Y');
NZ+COUNT(UPCASE(A(I)),'Z');
END;
IF T THEN PUT NX= NY= NZ=;
RUN;
回复 支持 1 反对 0

使用道具 举报

1

主题

12

帖子

103

积分

注册会员

Rank: 2

积分
103
板凳
发表于 2014-4-14 21:20:46 | 只看该作者
本帖最后由 henryyhl 于 2014-4-14 21:35 编辑

一种比较笨的方法,抛砖引玉啊
data;
input A1 $ A2 $ A3 $ A4 $ A5 $;
retain         n_x        n_y        n_z        0;
n_x1=sum(A1="x",        A2="x",        A3="x",        A4="x",        A5="x");
n_y1=sum(A1="y",        A2="y",        A3="y",        A4="y",        A5="y");
n_z1=sum(A1="z",        A2="z",        A3="z",        A4="z",        A5="z");
n_x+n_x1;
n_y+n_y1;
n_z+n_z1;
drop n_x1 n_y1 N_z1;
cards;
x   y   z    x   y
y   z    x   y   x
z   y   x   z    y
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
发表于 2014-4-14 21:24:59 来自手机 | 只看该作者
大家太给力了!
回复 支持 反对

使用道具 举报

2

主题

41

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
6#
发表于 2014-4-15 14:05:14 | 只看该作者
本帖最后由 mono 于 2014-4-15 14:07 编辑

试试这个。

data a;
input (A1 A2 A3 A4 A5) ($);
cards;
x   y   z    x   y
y   z    x   y   x
z   y   x   z    y
;
run;
proc iml;
   use a;
  read all ;
b = A1|| A2|| A3||A4||A5;
k = loc( b='x' );
l=loc(b='y');
m=loc(b='z');
x = ncol(k);
y = ncol(l);
z = ncol(m);
print x y z;
回复 支持 反对

使用道具 举报

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
7#
 楼主| 发表于 2014-4-15 21:59:02 | 只看该作者
mono 发表于 2014-4-15 14:05
试试这个。

data a;

这个proc步没见过诶。。长见识了
回复 支持 反对

使用道具 举报

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
8#
 楼主| 发表于 2014-4-15 22:00:25 | 只看该作者
谢谢大家哈 万分感激 问题解决啦
回复 支持 反对

使用道具 举报

6

主题

31

帖子

293

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
293
9#
发表于 2014-4-16 08:56:02 | 只看该作者
呵呵,一天没来,居然这么热闹啊
SAS资源
1. SAS 微信:mysasnet
2. SAS QQ群:348941365
3. SAS Blog:编程|统计|医药
回复 支持 反对

使用道具 举报

10

主题

39

帖子

1070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1070
QQ
10#
发表于 2014-4-16 14:51:49 | 只看该作者
AAA 发表于 2014-4-14 21:14
***CASE;
data a;
input (A1 A2 A3 A4 A5) ($);

数组是简单快捷的方法。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 08:19 , Processed in 0.114264 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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