楼主: priss111
3231 9

[原创博文] 请问如何将else if 后面的i+1...i+7 用一个累加变量替换?谢谢! [推广有奖]

  • 0关注
  • 5粉丝

已卖:9份资源

副教授

16%

还不是VIP/贵宾

-

威望
0
论坛币
153 个
通用积分
47.5396
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
14935 点
帖子
472
精华
0
在线时间
808 小时
注册时间
2008-3-30
最后登录
2025-3-17

楼主
priss111 发表于 2012-6-27 11:00:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

请问如何将else if 后面的i+1...i+7 用一个累加变量替换?
谢谢!

data cv14;
        set cv1;
        array SerumTestPoup [8] SerumTestPoup1-SerumTestPoup8;
        array SerumTestPoupn [8] SerumTestPoup11 SerumTestPoup22 SerumTestPoup33 SerumTestPoup44 SerumTestPoup55 SerumTestPoup66 SerumTestPoup77 SerumTestPoup88;
                do i=1 to 8;
          SerumTestPoup= substr(field24,i,1);

                           if SerumTestPoup= i then SerumTestPoupn=1;
                                else if SerumTestPoup=i+1 then SerumTestPoupn[i+1]=1;
                                else if SerumTestPoup=i+2 then SerumTestPoupn[i+2]=1;
                                else if SerumTestPoup=i+3 then SerumTestPoupn[i+3]=1;
                                else if SerumTestPoup=i+4 then SerumTestPoupn[i+4]=1;
                                else if SerumTestPoup=i+5 then SerumTestPoupn[i+5]=1;
                                else if SerumTestPoup=i+6 then SerumTestPoupn[i+6]=1;
                                else if SerumTestPoup=i+7 then SerumTestPoupn[i+7]=1;
                        end;
                        run;



变量field24中的部分数据:
FIELD24
1234678    13457    12467    12347    1    123457    12347    123457    68    12347    134    1345    12347    12348    1347    123457    1347    2347    12345    12347    7    12347    138    47    8    27    1345    12347    1234567    23478    12347    1234    123457    123457    123467    123478  
二维码

扫码加我 拉你入群

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

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

关键词:else LSE ELS SUBSTR field

回帖推荐

tj0412ymy 发表于6楼  查看完整内容

揣摩了一下LZ的意图,应该是想实现这样一个功能:
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
epoh + 3 + 3 + 3 鼓励积极发帖讨论

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

本帖被以下文库推荐

沙发
yanan9256 发表于 2012-6-27 13:48:26
貌似是要把变量转换成0-1变量啊 但是不应该是 i+1 ----- i +7

藤椅
priss111 发表于 2012-6-27 14:11:21
yanan9256 发表于 2012-6-27 13:48
貌似是要把变量转换成0-1变量啊 但是不应该是 i+1 ----- i +7
那请问应该怎样设置 以 代替i+1,i+2,i+3...i+7?

板凳
tj0412ymy 发表于 2012-6-27 18:03:17
priss111 发表于 2012-6-27 14:11
那请问应该怎样设置 以 代替i+1,i+2,i+3...i+7?
  1. data cv14;
  2.         set cv1;
  3.         array SerumTestPoup [8] SerumTestPoup1-SerumTestPoup8;
  4.         array SerumTestPoupn [8] SerumTestPoup11 SerumTestPoup22 SerumTestPoup33 SerumTestPoup44 SerumTestPoup55 SerumTestPoup66 SerumTestPoup77 SerumTestPoup88;
  5.                 do i=1 to 8;
  6.           SerumTestPoup= substr(field24,i,1);
  7.           do j=0 to 7;
  8.           if SerumTestPoup=i+j then SerumTestPoupn[i+j]=(SerumTestPoup=i+j);
  9.                   else leave;
  10.           end;
  11.     end;
  12. run;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

报纸
yanan9256 发表于 2012-6-27 18:11:37
tj0412ymy 发表于 2012-6-27 18:03
我有几个疑问:
1. substr(field24,i,1) 如果 i 的值大于 dield24变量的长度 会出现什么情况?
2. substr子字符串是一个字符型的吧? 条件判断的时候会出问题么?
3. 还有一个就是 SerumTestPoup= 没有数组下标 那么给它附一个值  那这个值 附给谁了啊??

地板
tj0412ymy 发表于 2012-6-27 20:48:51
yanan9256 发表于 2012-6-27 18:11
我有几个疑问:
1. substr(field24,i,1) 如果 i 的值大于 dield24变量的长度 会出现什么情况?
2. sub ...
揣摩了一下LZ的意图,应该是想实现这样一个功能:
  1. data cv1;
  2. input field24 $;
  3. cards;
  4. 1234678
  5. 13457
  6. 12467
  7. 12347
  8. 1
  9. 123457
  10. 12347
  11. 123457
  12. 68
  13. 12347
  14. 134
  15. 1345
  16. 12347
  17. 12348
  18. 1347
  19. 123457
  20. 1347
  21. 2347
  22. 12345
  23. 12347
  24. 7
  25. 12347
  26. 138
  27. 47
  28. 8
  29. 27
  30. 1345
  31. 12347
  32. 1234567
  33. 23478
  34. 12347
  35. 1234
  36. 123457
  37. 123457
  38. 123467
  39. 123478
  40. ;
  41. run;

  42. data cv14(drop=i j);
  43.         set cv1;
  44.         array SerumTestPoup [8] SerumTestPoup1-SerumTestPoup8;
  45.         array SerumTestPoupn [8] SerumTestPoup11 SerumTestPoup22 SerumTestPoup33 SerumTestPoup44 SerumTestPoup55 SerumTestPoup66 SerumTestPoup77 SerumTestPoup88;
  46.                 do i=1 to 8;
  47.           SerumTestPoup[i]=input(substr(field24,i,1),best12.);
  48.           do j=0 to 7;
  49.           if SerumTestPoup[i]=i+j then SerumTestPoupn[i+j]=(SerumTestPoup[i]=i+j);
  50.                   else leave;
  51.           end;
  52.     end;
  53. run;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

7
priss111 发表于 2012-6-27 22:03:52
tj0412ymy 发表于 2012-6-27 20:48
揣摩了一下LZ的意图,应该是想实现这样一个功能:
谢谢回复!!

运行后不是我最终要的结果,
比如第一个观测1234678,
那么SerumTestPoupn11/22/33/44/66/77/88的第一个观测取值都是1,
但用这段code中生成的SerumTestPoupn66/77/88的第一个观测却是系统缺失值。

说明:
field24已设置成字符型变量;
field24中的观测可以是1-8这8个数字的任意组合,
有的是123456、有的是134256,
但只想统计去各个字符(1-8)出现的频次,
与每个观测中字符的顺序没有关系,
比如123456和134256这两个观测中出现字符1、2、3、4、5、6的频次分别是2次;

目标:
1、把field24拆分成8个变量即每一个字符占一个变量;
2、把1、中8个变量中相同字符的观测再分别生成8个0-1变量;

最终统计每个字符出现的频次。

8
priss111 发表于 2012-6-27 22:27:32
yanan9256 发表于 2012-6-27 18:11
我有几个疑问:
1. substr(field24,i,1) 如果 i 的值大于 dield24变量的长度 会出现什么情况?
2. sub ...
谢谢回复!


1.i超过field24的长度就没有值了吧;
2.field24是字符型变量,条件判断时候没有提示有问题(您这样思考很好)而且得到了我想要的结果;
3.SerumTestPoup1-SerumTestPoup8中的取值(赋值)可能是1-8这8个字符中的任意一个,
其实就是指SerumTestPoup1-SerumTestPoup8中各变量的取值,
所以没有具体设置下标(其实这里应该是个隐含下标变量).

9
priss111 发表于 2012-6-28 11:05:04
tj0412ymy 发表于 2012-6-27 18:03
谢谢回复!

根据您的回复
受到启发(原来do下面可以仅跟一个do的)
修改了一点儿code
得到了我想要的变量
dododo...
谢谢!
  1. data cv14;  
  2.         set cv1;
  3.         array SerumTestPoup [8] SerumTestPoup1-SerumTestPoup8;
  4.         array SerumTestPoupn [8] SerumTestPoup11 SerumTestPoup22 SerumTestPoup33 SerumTestPoup44 SerumTestPoup55 SerumTestPoup66 SerumTestPoup77 SerumTestPoup88;
  5.                 do _n_=1 to 8;
  6.           SerumTestPoup[_n_]= input(substr(field24,_n_,1),best2.);
  7.                         do j= 1 to 8;
  8.                                 if SerumTestPoup[_n_]=j then SerumTestPoupn[j]=1;
  9.                                         *else leave;
  10.                                 end;
  11.                         end;
  12.                         run;
复制代码

10
yanan9256 发表于 2012-6-28 12:31:41
tj0412ymy 发表于 2012-6-27 20:48
揣摩了一下LZ的意图,应该是想实现这样一个功能:
还有一种 字符转数值的方法:SerumTestPoup=substr(field24,i,1)+0 比较简便一些 但有缺失值时,output窗口会有提示,比较恼人。
Another question   语句中 then SerumTestPoup[i+j]=(SerumTestPoup=i+j) 是什么意思?
是当小括号里面 条件为真时 取值1 为假时 取值为0的意思吗?
PS:楼主提到的 66 77 88变量缺失,就是i+j导致的 i+j大于8时 条件都为假了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 02:46