楼主: playmore
2214 8

请问有计算施密特正交化的SAS宏吗? [推广有奖]

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16356 个
通用积分
8.6697
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1332 小时
注册时间
2007-1-11
最后登录
2025-12-1

初级学术勋章 初级热心勋章 中级热心勋章

楼主
playmore 发表于 2012-12-4 18:41:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
原始表格就是n个数值变量组成的表格
希望得到一个新的表格,包含正交化后的新的n个变量
在网上没有搜到,不知道有没有现成的
或者比较好的解决方法

我现在想到的一种办法是用iml来做
但是如果原表格有by变量,也就是分组变量的话
有多少个分组就要做多少次iml过程,不太方便

另外我想到的就是用sql步来做
这样可以用到group by来进行分组操作
但是由于施密特正交化是渐近的算法
sql步中的select语句比较难写成统一的宏

不知道我说清楚没有
总之等待大牛解答
二维码

扫码加我 拉你入群

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

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

关键词:施密特正交化 SAS宏 正交化 施密特 Select 施密特 网上

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

沙发
ziyenano 发表于 2012-12-5 10:27:09
前几天刚帮别人用iml写的施密特正交过程~
将iml写到宏里面,加个循环来解决分组的问题,不可以吗?
一些内接运算,还是用矩阵处理比较好,base,sql太吃力了
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

总评分: 论坛币 + 100   查看全部评分

藤椅
playmore 发表于 2012-12-5 11:07:54
ziyenano 发表于 2012-12-5 10:27
前几天刚帮别人用iml写的施密特正交过程~
将iml写到宏里面,加个循环来解决分组的问题,不可以吗?
一些内 ...
不知能否分享下你写的宏?多谢!

另外我的问题是分组众多,每个分组中向量的维数也不同,还有将数据read进iml的矩阵中是否要新生成一个dataset,或者可以指定一些观测进入iml矩阵?

现在就是不知道SAS的IML对于向量内积有什么优化没,否则用SQL的SUM运算好像速度也没有什么拖慢,只是程序看起来实在是太难看了
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

板凳
ziyenano 发表于 2012-12-5 11:42:11
proc  iml;
a={1 2 3,
   4 0 6,
   7 8 0};
b=j(nrow(a),ncol(a),0);
do i=1 to ncol(a);
if i=1 then do;
b[,1]=a[,1];
end;
else do;
u=a[,i];v=b[,1:i-1];
b[,i]=u-(t(u)*v/((v#v)[+,])*t(v))`;
/*b[,i]=u-v*(t(v)*u/t((v#v)[+,]));*/
end;
end;
print b;
quit;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 20 + 1 + 1 + 2 热心帮助其他会员

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

报纸
ziyenano 发表于 2012-12-5 11:45:14
在read data 的时候 可以通过where来筛选进入iml的观测~
use dataset;
read all var {} where  group_variable= ;
用循环或者 call execute都可以

地板
playmore 发表于 2012-12-5 12:35:01
ziyenano 发表于 2012-12-5 11:45
在read data 的时候 可以通过where来筛选进入iml的观测~
use dataset;
read all var {} where  group_var ...
嗯,多谢了!

再问下最后得到的结果矩阵可以导出至现有的SAS数据集吗?
如果每个分组变量生成一个新的数据集也是挺麻烦的事
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

7
ziyenano 发表于 2012-12-5 13:04:29
playmore 发表于 2012-12-5 12:35
嗯,多谢了!

再问下最后得到的结果矩阵可以导出至现有的SAS数据集吗?
好像是不可以的;
你在进行iml模块的时候,原数据集处于打开状态,
不能修改或者覆盖的;
知道quit为止。
你可以将得到每次的矩阵纵向合并成一个新矩阵,
最后将那个大矩阵输出。
或者建立一个temp表,
每次循环之后,将矩阵输出到temp表中,然后再将temp表中数据插入到目标数据集中




8
playmore 发表于 2012-12-5 15:57:44
ziyenano 发表于 2012-12-5 13:04
好像是不可以的;
你在进行iml模块的时候,原数据集处于打开状态,
不能修改或者覆盖的;
嗯,很受启发

另我现在纯用SQL步做了一个宏,但是发现由于精度的限制(也可能是缺失值的问题,我没有控制缺失值),在检验的时候发现任意两个已正交化的向量的内积不完全为0,越算到最后的正交基之间的内积与0差的越大,最后到了几十的量级。我用的数据可比为三年时间长度的股票滚动一月、三月和半年的换手率。

不知道你用IML的结果如何,我知道在IML有直接算proj的函数,用这个函数而非SQL步的话最后的精度如何?谢谢!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

9
ziyenano 发表于 2012-12-5 16:04:44
playmore 发表于 2012-12-5 15:57
嗯,很受启发

另我现在纯用SQL步做了一个宏,但是发现由于精度的限制(也可能是缺失值的问题,我没有控 ...
我只是简单的用几组向量做了测验,也没有缺失值~只能保证结果和手算的一样,施密特正交化本身好像会导致精度问题;
内接的计算我只是按照内积的定义来算的,因为中间有一步通过矩阵运算来代替了一个循环,所以没用函数。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-3 11:45