楼主: 子墨13
3222 5

如何统计取值不同的列的个数 [推广有奖]

  • 3关注
  • 5粉丝

已卖:1份资源

讲师

54%

还不是VIP/贵宾

-

威望
0
论坛币
224 个
通用积分
3.0011
学术水平
6 点
热心指数
12 点
信用等级
5 点
经验
5058 点
帖子
426
精华
0
在线时间
352 小时
注册时间
2010-7-25
最后登录
2022-2-16

楼主
子墨13 在职认证  发表于 2013-6-20 15:35:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问各位前辈,我现在要统计变量seg1至变量seg10中不同取值的个数,程序如下:

data d;
set c;
array seg[10] seg1-seg10;
seg_2=0;
ok:do i=1 to 10;
do k=i-1 to 1 by -1;
if k<=0 then goto to;
if substr(seg(i),1,2)=substr(seg(k),1,2) then goto ok;
end;
to:do j=i+1 to 10;
if substr(seg(i),1,2)^=' '  and substr(seg(i),1,2)^=substr(seg(j),1,2) then do;
seg_2+1;
goto ok;
end;
end;
end;
run;

但是这个程序好像陷入死循环了还是怎么的,我只统计第一、二、三个观测的时候(这三个观测seg1 到seg10中,每个观测都只有两个值,其余为空),非常快,可以准确计算,但当统计到第四个观测(有三个seg值)的时候,程序就一直在运行了。
请问这个程序哪里出问题了,或者大家有没有比较好的方法啊?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:array Data SEG Set ARR 如何 统计

本帖被以下文库推荐

沙发
子墨13 在职认证  发表于 2013-6-20 16:18:28
自己把这个帖子顶上去

藤椅
pobel 在职认证  发表于 2013-6-20 17:13:02
data c;
   array seg[10];
   do i=1 to 20;
      do j=1 to 10;
             seg(j)=int(ranuni(0)*10);
          end;
          output;
   end;
run;

data d;
        set c;
        array seg[10] seg1-seg10;
        value_num=0;
        length str $200;
        do i=1 to 10;
           if indexw(cats(str),cats(seg(i)),"*")=0 then do;
              value_num+1;
              str=catx("*",str,seg(i));
                end;
        end;
        put str= value_num=;
        drop i j;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
boe + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

板凳
yongyitian 发表于 2013-6-21 10:50:20
/*  Here is another way  */
data c;
   array seg[10];
   do i=1 to 10;
      do j=1 to 10;
         seg(j)=int(ranuni(123)*10);
      end;
      output;
   end;
   drop i j;
run;

data D1;
   set c;
   array seg{10} seg1-seg10;
   length numbers $20;
   call sortn(of seg:);
   Distinct_N =1;
   numbers = seg(1);
      do i = 1 to dim(seg)-1;
         if seg(i) ^= seg(i+1) then do;
         Distinct_N+1;
         numbers= catx('_', numbers, seg(i+1));
         end;
      end;
  set c;   
  drop i;
run;

报纸
子墨13 在职认证  发表于 2013-6-22 10:23:50
yongyitian 发表于 2013-6-21 10:50
/*  Here is another way  */
data c;
   array seg[10];
噢啦,thank u~~~~SAS跳出循环是一门大学问的说~~~

地板
子墨13 在职认证  发表于 2013-6-22 10:24:28
本问题已解决

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-6 02:48