楼主: 黄建荣
1323 9

求循环语句 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

14%

还不是VIP/贵宾

-

威望
0
论坛币
795 个
通用积分
0.1200
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
7085 点
帖子
77
精华
0
在线时间
175 小时
注册时间
2010-5-8
最后登录
2022-2-23

15论坛币
QQ截图20121113162433.png
如图所示,数据由因变量Y与自变量x1-x200构成整个数据集,储存在在work.indices中;
现在我想将x1与x2-x200做归一化,x2与x3-x200做归一化,....依此类推直到x199与x200做归一化,公式为:

n1=(x1-x2)/(x1+x2),n2=(x1-x3)/(x1+x3),n3=(x1-x4)/(x1+x4),n4=(x1-x5)/(x1+x5),.........n201=(x2-x3)/(x2+x3),.......
nK=(x199-x200)/(x199+x200).(K为常数)
将所有数据在所得到的新变量还是按照Y、n1、n2、n3....nk储存起来在新的数据集work.new中。




最佳答案

pobel 查看完整内容

是不是这样?
关键词:循环语句 Indices Work dice 如图所示 因变量 自变量 如图所示

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2012-11-13 16:47:41 |只看作者 |坛友微信交流群
是不是这样?
  1. data test;
  2.     y=1000;
  3.         array x[200] x1-x200;
  4.         do _n_=1 to 200;
  5.            x(_n_)=_n_;
  6.         end;
  7. run;

  8. data test1;
  9.     set test;
  10.         array x(200);
  11.         array nn(19900) ;
  12.         do i=1 to 199;
  13.           do j=i+1 to 200;
  14.          num+1;
  15.                  nn(num)=(x(i)-x(j))/(x(i)+x(j));
  16.           end;
  17.         end;
  18.         keep y nn:;
  19. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 鼓励积极发帖讨论

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

和谐拯救危机

使用道具

藤椅
ziyenano 发表于 2012-11-13 17:58:43 |只看作者 |坛友微信交流群
data ex;
input x1-x5;
cards;
1 2 3 4 5
6 7 8 9 10
;
run;

data ex1;
set ex;
array   m(5)  x1-x5;
array n(10);
sum=0;
do i=1 to dim(m)-1;
    if i ne 1 then  sum+(dim(m)-i+1);
    do j=i to dim(m)-1;
        if (m(i)+m(j+1))=0 then
    n(sum+j-i+1)=.;
        else
        n(sum+j-i+1)=(m(i)-m(j+1))/(m(i)+m(j+1));
end;
end;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 分析的有道理

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

使用道具

板凳
黄建荣 发表于 2012-11-13 18:24:13 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-13 17:29
是不是这样?
65   data test;
66       y=1000;
67           array x[200] x1-x200;
68           do _n_=1 to 200;
69              x(_n_)=_n_;
70           end;
71   run;

NOTE: The data set WORK.TEST has 1 observations and 201 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


72
73   data test1;
74       set test;
75           array x(200);
76           array nn(19900) ;
77           do i=1 to 199;
78             do j=i+1 to 200;
79            num+1;
80                    nn(num)=(x(i)-x(j))/(x(i)+x(j));
81             end;
82           end;
83           keep y nn:;
                    --
                    241
ERROR 241-185: The array nn is not allowed in a DROP/KEEP/RENAME context.

84   run;

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEST1 may be incomplete.  When this step was stopped there were 0
         observations and 19901 variables.
WARNING: Data set WORK.TEST1 was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.06 seconds
      cpu time            0.04 seconds

数据未能读入进去。。如上所示: there were 0
         observations and 19901 variables.

使用道具

报纸
pobel 在职认证  发表于 2012-11-13 19:47:03 |只看作者 |坛友微信交流群
黄建荣 发表于 2012-11-13 18:24
65   data test;
66       y=1000;
67           array x[200] x1-x200;
40   data test;
41       y=1000;
42           array x[200] x1-x200;
43           do _n_=1 to 200;
44              x(_n_)=_n_;
45           end;
46   run;

NOTE: The data set WORK.TEST has 1 observations and 201 variables.
NOTE: DATA statement used (Total process time):
      real time           0.02 seconds
      cpu time            0.00 seconds


47
48   data test1;
49       set test;
50           array x(200);
51           array nn(19900) ;
52           do i=1 to 199;
53             do j=i+1 to 200;
54                   num+1;
55                    nn(num)=(x(i)-x(j))/(x(i)+x(j));
56             end;
57           end;
58           keep y nn:;
59   run;

NOTE: There were 1 observations read from the data set WORK.TEST.
NOTE: The data set WORK.TEST1 has 1 observations and 19901 variables.
NOTE: DATA statement used (Total process time):
      real time           0.09 seconds
      cpu time            0.07 seconds
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 观点有启发

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

和谐拯救危机

使用道具

地板
黄建荣 发表于 2012-11-13 21:05:49 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-13 19:47
40   data test;
41       y=1000;
42           array x[200] x1-x200;
您好,谢谢您的耐心帮助,但是我的程序还是老是在nn上面出错,我用SAS9.0 ,是不是我支持nn:的用法?如下:

219          keep y nn:;
                    --
                    241
ERROR 241-185: The array nn is not allowed in a DROP/KEEP/RENAME context.

220  run;
怎么办啊?本人对循环是不太懂。。谢谢您的回复

使用道具

7
pobel 在职认证  发表于 2012-11-14 08:18:09 |只看作者 |坛友微信交流群
黄建荣 发表于 2012-11-13 21:05
您好,谢谢您的耐心帮助,但是我的程序还是老是在nn上面出错,我用SAS9.0 ,是不是我支持nn:的用法?如下: ...
试一下这句:

keep y nn1-nn19900;
和谐拯救危机

使用道具

8
黄建荣 发表于 2012-11-14 08:54:22 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-14 08:18
试一下这句:

keep y nn1-nn19900;
嗯,我的不支持NN:,语句是没有了问题。但是我将数据集test换成我的数据集work.indices后,只生成一行以nn1-nn19900为变量名的第一行数,

我的目的是想每行数均需要进行归一化计算,而且我的数据有400行,需要考虑多行,因此还需更正。谢谢回复

使用道具

9
ls5655 发表于 2012-11-14 17:39:08 |只看作者 |坛友微信交流群
在end前加output;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 观点有启发

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

使用道具

10
黄建荣 发表于 2012-11-14 21:37:28 |只看作者 |坛友微信交流群
ls5655 发表于 2012-11-14 17:39
在end前加output;
不知道什么问题,您能将整个完整的程序给贴出看看,我是不知道哪儿出问题了

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 11:34