全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2635 10
2012-08-25
proc sql;
select avg(d2)as looser from pq1(firstobs=1 obs=10);
select avg(d2) as winner from pq1(firstobs=87 obs=96);
run;
data score ;
array ACR(96) acr1-acr96;
acr(1)=winner-looser;
%put acr(1);
run;

我想要把proc里得出的winner和looser做一个减法,结果放在数组ACR(*)里面,可是好像不能调用到
proc过程里的这两个变量,提示错误
“NOTE: Variable looser is uninitialized.
NOTE: Variable winner is uninitialized.

大侠们给看看  要怎么改呢?
二维码

扫码加我 拉你入群

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

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

全部回复
2012-9-5 09:55:05
proc sql;
select avg(d2) into :looser from pq1(firstobs=1 obs=10);
select avg(d2) into :winner from pq1(firstobs=87 obs=96);
run;
data score ;
acr1=symget('winner')-symget('looser');
put acr1;
run;
二维码

扫码加我 拉你入群

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

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

2012-9-5 21:51:43
haku_x300 发表于 2012-9-5 09:55
proc sql;
select avg(d2) into :looser from pq1(firstobs=1 obs=10);
select avg(d2) into :winner fro ...
啊,谢谢,那如果,我在score数据集里面要不断的放入新数据,很多次循环,每次有一个结果数据存到score里呢?我之前用数组,因为每次循环都是新定义数组,所以之前的结果就都被冲掉了
像你这样改的程序是不是可以直接用  acr&t呢?(t是取值1-95的宏定义的全局变量)
二维码

扫码加我 拉你入群

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

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

2012-9-5 22:41:56
能不能把你要的结果完整说一下? 感觉你的方法麻烦了
二维码

扫码加我 拉你入群

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

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

2012-9-6 07:24:04
幸福微积分 发表于 2012-9-5 21:51
啊,谢谢,那如果,我在score数据集里面要不断的放入新数据,很多次循环,每次有一个结果数据存到score里 ...
题目要求再描述一下吧,最好给出源数据集和想要的结果数据集的例子.
二维码

扫码加我 拉你入群

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

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

2012-9-6 18:35:27
haku_x300 发表于 2012-9-6 07:24
题目要求再描述一下吧,最好给出源数据集和想要的结果数据集的例子.
PROC IMPORT OUT= WORK.short2
            DATAFILE= "E:\SAS 9.1.3Data\080401.xls"/*数据表里是96支股票,四年的日收益率数据,列变量是X1-X96,96支股票*/
            DBMS=EXCEL REPLACE;
                        sheet="CR";
     GETNAMES=YES;
     MIXED=YES;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
         run;

/*%global  p=1,q=1;*/

%macro returnc();

%do t=1 %to 96;
%let t1=%eval(&t+1);
/*选取的观测值随t滚动——形成期(t,t+P-1)持有期(t+p,t+p+q-1),t++*/
proc sql;
       create table pq&t as
      select * from short2(firstobs=&t obs=&t1);/*调用不出来。??!!!!*/
                 /*  select * from short2(firstobs=1 obs=2);*/
quit;       
run;

/*转置*/
proc transpose data=pq&t  out=pqtr&t  name=var prefix=d;
run;

/*排序期,持有期求和  */
%macro read();
  %do i= 1 %to 96;       
  proc sql;
  create table pq12&t as
     select sum(d1,0)as d1,sum(d2,0)as d2 from pqtr&t  where(&i);/*sum随PQ变,手工操作~*/       
  quit;
  run;
  %end;
  %mend read;
  %read;

/*形成期升序排序*/
proc sort data=pq12&t;
by d1;
run;

/*创建赢者组合和输者组合 */
proc sql  ;/* 存储looser和winner看是否可行(原先用的是into:loser做成宏)*/

select avg(d2) into: loser from pq12&t(firstobs=1 obs=10) ;
select avg(d2) into: winner from pq12&t(firstobs=87 obs=96);

%put &loser&t &winner;

quit;

data score ;
array ACR(96) acr1-acr96 ;
/*可以设一个数组记录每一期的return */
acr(&t)=&winner-&looser;/*????总是覆盖 */
run;

%end;
%mend returnc;
%returnc;


这是我大体的程序思路,里面红色的部分是还有问题的,一直不会解决,绿色的是不知道怎么改,才能让这个数组来存储我要的一系列结果。。。不知这样说,您能看明白吗,因为是初学,所以程序系的可能没什么章法。。。希望你能有耐心给帮忙看看
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群