SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1159|回复: 3
打印 上一主题 下一主题

不同数据集之间的数据处理问题(数据标准化问题)

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2006-2-28 17:02:12 | 只看该作者

不同数据集之间的数据处理问题(数据标准化问题)

各位同仁,现急求救解答如下问题:如何将变量x的值减该变量的最小值,然后再除以最大值减最小值的差,即 x=(X-xmin)/(Xmax-Xmin)。

我的程序如下,但有问题,请帮助解决,先谢谢了。
data x(drop=id);
   input id $ a b c;
    cards;
          1  1 2 3
          2  3 4 5
          3  7 8 6
    ;
    run;


   proc means data=x ;output out=x1;run;

  data x2;set x1;if _STAT_='MIN' or _STAT_='MAX';
drop _FREQ_ _STAT_ _TYPE_ id;  run;

data x3;
    array x[3]  a b c;
    array x2[3,2] ;
        if _n_=1 then set x2; run;
            set x;
              do i=1 to 3;
        
          x[i]=(x[i]-x2[1,i])/(x2[2,i]-x2[1,i]);
              end;
    run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2006-3-1 09:58:53 | 只看该作者

一种实现方法

有朋友推荐了一种方法,各位看如何?是否需要改进!

data x;
   input id $ a b c;
    cards;
          1  1 2 6
          2  3 5 5
          3  7 8 3
    ;
    run;

*---find all var names and number of vars---*;

proc contents data=x noprint out=kk;
run;

*---get number of var and var names ------*;
*---and put them into macro variables-----*;

data _null_;
   set kk(where=(type=1)) end=lastone;
      call symput('varn_'||compress(_n_),compress(name));
         if lastone then do;
            call symput('numvar',compress(_n_));
            end;
run;
  %put _Global_;

   *---get max and min of all vars---------*;
proc means data=x noprint nway;
output out=sss(drop=_type_ _freq_) max= min= /
autoname;
run;

data x_m;
if _n_=1 then set sss;
set x;
run;

*---using macros to work var by var----*;
%macro xstand;
data x_result;
set x_m;
%do I =1% to &numvar.;
     new_&&varn_&I. = (&&varn_&I. - &&varn_&I.._min)/(&&varn_&I.._max-&&varn_&I.._min);
  %end;
  keep %do I =1 %to &numvar.;
           new_&&varn_&I.
        %end;   ;
run;
%mend;

%xstand;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2006-3-1 18:10:57 | 只看该作者

dsfsdfssssssssssss

[code:47afd]data x(drop=id);
  input id $ a b c;
  cards;
1 1 2 3
2 3 4 5
3 7 8 6
;
run;

%macro func(v);
  (&v-min(&v))/(max(&v)-min(&v)) as &v
%mend;

proc sql;
  create table final as
  select %func(a), %func(b), %func(c)
  from x;
quit;[/code:47afd]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2006-3-3 17:10:14 | 只看该作者

谢谢!如果有50个变量该如何处理?

高手!谢谢! 如果有50个变量该如何处理?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-9 14:15 , Processed in 0.075215 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表