|
板凳

楼主 |
发表于 2005-12-19 23:53:41
|
只看该作者
谢谢ahuige
很高兴得到ahuige的建议, 很希望能和你能进一步讨论一下:
不知ahuige所说的“SQL SELECT 来RENAME”是指什么, 我的理解是通过rename给各个dataset的field加前缀, 以此区分不同dataset的feild名, 其实这个方法我们也曾经考虑过,我们也有一段时候对某些程序应用如此的标准, 但是由于我们要处理的dataset的field数量较多, 一般为几时个, 这样一进一出都要rename的话不但代码量是惊人的,并且这样反而降低了可读性, 给以后的维护带来困难, 举个例子:
data t1(keep=f1 f2 f3 f4...);
....
run;
data t2(keep=fa fb fc fd...);
....
run;
data t3(keep=t3.f1
...
t3.fa
...);
merge t1(rename=(f1=t1.f1
f2=t1.f2
f3=t1.f3
f4=t1.f4
...
))
t2(rename=(fa=t2.fa
fb=t2.fb
fc=t2.fc
fd=t2.fd
...
));
by key;
rename t1.f1=t3.f1
...
t2.fa=t3.fa
...
run;
这样代码量起码是原来的几倍, 可能会出现吃力不讨好的情况.
我们现在的解决方法是在读入dataset之前写keep来提醒自己各自dataset的field名,希望能较清晰各dataset现有的feild:
data t3(keep=f1...
fa...);
merge t1(keep=f1
...)
t2(keep=fa
...);
run;
但是这种keep的方法也只能依靠程序员肉眼去留意, 其实我比较感兴趣的是不知sas有否一种系统检查机制能够检查出重field并对此作处理和提示(我以前写过oracle的存储过程, 他们也有这样一套机制), 如warning, exception, 等等, 如此就会减低出错的机会.
很感兴趣ahuige所说的“如果你想自动完成.得到的变量名也基本上是arbitrary的,比如两个A,处理后为A1,A2...”不知在sas怎样实现, 望指点, 万分感谢!:) |
|