全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学
1895 8
2010-05-31
问题程序如下:
data string;
  input string $40.;
  array myvars{27}   _temporary_ ;
  array my{27};
  if _n_ =1 then do i=1 to 27;
      myvars{i}=i;
   end;
   do i=1 to 27;
     if findw(string,myvars{i},",") then my{y}=1;
   end;
   drop i;
datalines;
1,4
3,13
1,2,3,4,7,8,9
19
2,5
1,2,3,10,17
1,2,3,4,5,6,7,8
2,3,4,7,9
1,2,3,19,20,23
1,2,3
1,2,3,15
8,10,13
;
run;

想得到如下结果:
Snap2.jpg
但程序老是出错,恳请高手指点问题出在哪里
非常感谢
附件列表
Snap1.jpg

原图尺寸 7.1 KB

Snap1.jpg

二维码

扫码加我 拉你入群

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

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

全部回复
2010-5-31 18:17:18
顶起来,让sas高手来看看。帮帮忙
二维码

扫码加我 拉你入群

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

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

2010-5-31 22:09:26
Hope this helps

data
string;
input string $40.;
array myvars{27} _temporary_ ;
/* make sure the conversion was done correctly */
array my{27} $2.;
if _n_ =1 then do i=1 to 27;
myvars{i}=i;
end;
do i=1 to 27;
/* the leading and following spaces should be deleted */
if findw(strip(string), strip(myvars{i}),",") then my{i}=1;
end;
drop i;
datalines;
1,4
3,13
1,2,3,4,7,8,9
19
2,5
1,2,3,10,17
1,2,3,4,5,6,7,8
2,3,4,7,9
1,2,3,19,20,23
1,2,3
1,2,3,15
8,10,13
;
run;
二维码

扫码加我 拉你入群

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

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

2010-5-31 22:24:12
方法一:稍修改LZ算法
复制代码
方法二:每条作定步长例为27的判断,效率很低
稍微优化下,直接从string出发......
复制代码
希望对你有帮助
二维码

扫码加我 拉你入群

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

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

2010-5-31 23:07:11
楼上两位高人太强了
小弟拜服
发现自己问题所在了,原来是myvars{i}转换为character后的填充的空字符问题
soporaeternus 的两种方法太高了,学习了
都是高人啊
二维码

扫码加我 拉你入群

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

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

2010-6-1 01:40:30
orlong 发表于 2010-5-31 18:14
问题程序如下:
data string;
  input string $40.;
  array myvars{27}   _temporary_ ;
  array my{27};
  if _n_ =1 then do i=1 to 27;
      myvars{i}=i;
   end;
   do i=1 to 27;
     if findw(string,myvars{i},",") then my{y}=1;
   end;
   drop i;
datalines;
1,4
3,13
1,2,3,4,7,8,9
19
2,5
1,2,3,10,17
1,2,3,4,5,6,7,8
2,3,4,7,9
1,2,3,19,20,23
1,2,3
1,2,3,15
8,10,13
;
run;

想得到如下结果:

但程序老是出错,恳请高手指点问题出在哪里
非常感谢
I re-write it. It seems a little clear in logic.

1) take an element from the string as an array index until NO element left.
2) Set the correspond variable value to 1 with that index.

data string;
  input string $40.;
  array my{27};
  do i=1 by 1 while(1);
      k=scan( string,i);
      if k then k1=input(k,8.);
      else leave;
      my[k1]=1;
  end;

keep  string my:;
datalines;
1,4
3,13
1,2,3,4,7,8,9
19
2,5
1,2,3,10,17
1,2,3,4,5,6,7,8
2,3,4,7,9
1,2,3,19,20,23
1,2,3
1,2,3,15
8,10,13
;
run;

proc print;run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群