楼主: 黄建荣
5499 11

[有偿编程] 循环语句对数据归一化处理 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

14%

还不是VIP/贵宾

-

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

20论坛币
00.png
如图所示,数据由因变量Y与自变量x1-x200构成整个数据集,储存在在work.indices中;
现在我想将x1与x2做归一化,x1与x3做归一化,x1与x4归一化...直到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中。

[size=13.333333969116211px]pobel大哥 给了我这个程序:
data test;
    y=1000;
        array x[200] x1-x200;
        do _n_=1 to 200;
           x(_n_)=_n_;
        end;
run;

data test1;
    set test;
        array x(200);
        array nn(19900) ;
        do i=1 to 199;
          do j=i+1 to 200;
         num+1;
                 nn(num)=(x(i)-x(j))/(x(i)+x(j));
          end;
        end;
        keep y nn1-nn19900;
run;

语句是没有了问题。但是我将数据集test换成我的数据集work.indices后,只生成一行以nn1-nn19900为变量名的第一行数。
我的目的是想每行数均需要进行归一化计算,而且我的数据有400行,需要考虑多行,因此还需更正?还请大侠们帮助,这个程序对我非常重要。。。先谢谢各位了!!

最佳答案

pobel 查看完整内容

个人认为SAS programming I、II、III和SAS Certification Prep Guide 都挺好
关键词:循环语句 归一化 Indices array pobel 因变量 自变量 如图所示

回帖推荐

pobel 发表于4楼  查看完整内容

这是一个5行的例子:

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2012-11-29 23:48:11 |只看作者 |坛友微信交流群
黄建荣 发表于 2012-11-30 16:17
谢谢pobel 大哥,这次确实非常准确了。。非常谢谢您的帮助,我是SAS程序菜鸟,想进一步提高自己的编程能力 ...
个人认为SAS programming I、II、III和SAS Certification Prep Guide 都挺好
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 对论坛有贡献

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

和谐拯救危机

使用道具

藤椅
pobel 在职认证  发表于 2012-11-30 08:49:41 |只看作者 |坛友微信交流群
试试加一行 num=0;

data test1;
    set test;
     num=0;
        array x(200);
        array nn(19900) ;
        do i=1 to 199;
          do j=i+1 to 200;
         num+1;
                 nn(num)=(x(i)-x(j))/(x(i)+x(j));
          end;
        end;
        keep y nn1-nn19900;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 分析的有道理

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

和谐拯救危机

使用道具

板凳
pobel 在职认证  发表于 2012-11-30 08:51:54 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-30 08:49
试试加一行 num=0;

data test1;
这是一个5行的例子:
  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.         do _n_=1 to 5;
  8.                   output;
  9.                 end;
  10. run;

  11. data test1;
  12.     set test;
  13.         array x(200);
  14.         array nn(19900) ;
  15.          num=0;
  16.         do i=1 to 199;
  17.           do j=i+1 to 200;
  18.                num+1;
  19.                  nn(num)=(x(i)-x(j))/(x(i)+x(j));
  20.           end;
  21.         end;
  22.         keep y nn1-nn19900;
  23. run;
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
黄建荣 + 1 + 1 + 1 观点有启发

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

使用道具

报纸
黄建荣 发表于 2012-11-30 16:17:17 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-30 08:51
这是一个5行的例子:
谢谢pobel 大哥,这次确实非常准确了。。非常谢谢您的帮助,我是SAS程序菜鸟,想进一步提高自己的编程能力,能否建议一两本书让我学习一下?

使用道具

地板
黄建荣 发表于 2012-12-1 20:45:14 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-30 16:37
个人认为SAS programming I、II、III和SAS Certification Prep Guide 都挺好
谢谢pobel 大哥,我已经找到了您说的教程了。以后有问题还是要麻烦大哥帮忙啊。。谢谢您。。真的。。这已经解决我大问题了。。

使用道具

7
黄建荣 发表于 2012-12-3 15:37:06 |只看作者 |坛友微信交流群
pobel 发表于 2012-11-30 08:51
这是一个5行的例子:
pobel 大哥还请你帮个忙啊,如帖上的循环,虽然归一化数据是出来了,但是没有标签,不知道得到的变量nn是谁与谁的归一化运算的结果,因此还需要加入标签,不然自己输出后在excel中加标签太多了...非常麻烦....

使用道具

8
pobel 在职认证  发表于 2012-12-3 16:04:41 |只看作者 |坛友微信交流群
黄建荣 发表于 2012-12-3 15:37
pobel 大哥还请你帮个忙啊,如帖上的循环,虽然归一化数据是出来了,但是没有标签,不知道得到的变量nn是 ...
加上加粗部分的代码试试。蓝色的是每个变量的label部分。

data test1;
    set test;
        array x(200);
        array nn(19900) ;
         num=0;
                *** prepare label;
                 length code $200;
                 if _n_=1 then call execute("proc datasets nolist; modify test1; label ");

        do i=1 to 199;
          do j=i+1 to 200;
               num+1;
                           if _n_=1 then do;
                                 _label=cats(i)||" VS "||cats(j);
                                 code=vname(nn(num))||"="||quote(strip(_label));
                                 call execute(code);
                           end;

                 nn(num)=(x(i)-x(j))/(x(i)+x(j));
          end;
        end;
                if _n_=1 then call execute("; run; quit;");
        keep y nn1-nn19900 ;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 热心帮助其他会员

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

和谐拯救危机

使用道具

9
黄建荣 发表于 2012-12-4 09:10:26 |只看作者 |坛友微信交流群
pobel 发表于 2012-12-3 16:04
加上加粗部分的代码试试。蓝色的是每个变量的label部分。

data test1;
已经完全解决了,谢谢大哥。呵呵。以后要多多学习了。

使用道具

10
黄建荣 发表于 2012-12-18 14:09:39 |只看作者 |坛友微信交流群
pobel 发表于 2012-12-3 16:04
加上加粗部分的代码试试。蓝色的是每个变量的label部分。

data test1;
大哥您好,您已经帮我解决的数据排列如下图所示: 00o.png

如果我的数据排列没有转置过来,在原来的那个未经筛选的数据集中(如下面两图所示),怎么进行归一化处理?
14561768c8zllumzpuo4o5.png 14561623hhtpxhy23kiibd.png
我要归一化的数据没有变量名,怎么写程序引用某个波段wave对应的ref值?

14561768c8zllumzpuo4o5.png (9.64 KB)

14561768c8zllumzpuo4o5.png

14561768c8zllumzpuo4o5.png (9.64 KB)

14561768c8zllumzpuo4o5.png

01010.png (12.96 KB)

01010.png

01010.png (12.96 KB)

01010.png

01010.png (12.96 KB)

01010.png

14561623hhtpxhy23kiibd.png (12.96 KB)

14561623hhtpxhy23kiibd.png

使用道具

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

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

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

GMT+8, 2024-4-28 21:44