全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3794 15
2012-09-05
本人精心整理的SAS中文论坛版主Hopewell跟帖的所有主题,希望对大家学习SAS有帮助,并求工作推荐,谢谢!
部分内容如下:详细内容见隐藏的附件,主要是为了让更多的人分享。


1、请教autocall macro facility hopewell » 2008年 3月 12日 周三 2:43 pm

书上说在autocall macro facility中可以把存储着source条目的catalog设为autocall library.但为什么我就没执行成功过呢?老是报错.
源程序如下
:
宏定义:

%macro test;
   %put This is a test;
%mend test;
存储为目录册new的source条目:

save temp.new.test.source
设定autocall library:

libname temp 'd:\temp';
filename new catalog 'temp.new';
options mautosource sasautos=new;
%test
log窗口的错误信息如下
:
ERROR: Write Access Violation In Task [ Submit )
Exception occurred at (04E82A97)
Task Traceback
Address Frame (DBGHELP API Version 4.0 rev 5)
04E82A97 04D2F724 sasxmac:mcn_main+0x1A97
67834F84 04D2F8E0 sasxshel:mcn_main+0x3F84
20202020 20202020 0001:00201020 <unknown>
ERROR: Generic critical error.
yugao1986 » 2011年 3月 20日 周日 9:41 pm:hopewell第一帖?

shiyiming » 2011年 3月 20日 周日 9:58 pm:第一反应是去打补丁
http://support.sas.com/resources/papers ... 6-2009.pdf

hssnow » 2011年 3月 20日 周日 10:31 pm:

哈哈,这老帖翻的好~

http://hssnow.name/
Be your personal best and make a difference

1.      求助:一个折磨了我很久的问题 specialuse » 2009年 7月 7日 周二 11:45 pm

数据集是这样子的:
code date p
1 1-1 1.1
1 1-2 1.2
1 1-3 1.1
1 1-4 1.5
1 1-5 1.7
2 1-1 2.1
2 1-2 2.2
2 1-3 1.6
2 1-4 1.5
2 1-5 1.9
3 1-1 1.3
3 1-2 1.4
3 1-3 1.6
3 1-4 1.1
3 1-5 1.0
...
附件列表

SAS中文论坛版主Hopewell跟帖的所有主题(并求工作推荐).pdf

大小:5.96 MB

 马上下载

SAS中文论坛版主Hopewell跟帖的所有主题

二维码

扫码加我 拉你入群

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

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

全部回复
2012-9-5 21:10:35
辛苦啦,
二维码

扫码加我 拉你入群

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

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

2012-9-5 22:03:55
支持,谢谢楼主
二维码

扫码加我 拉你入群

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

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

2012-9-5 22:29:18
谢谢!~~~
二维码

扫码加我 拉你入群

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

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

2012-9-5 22:29:52
谢谢!~~~
二维码

扫码加我 拉你入群

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

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

2012-9-6 10:00:32
2、生成新的字段 dh dh(t)=median(p(t)~p(t-2)) 即,对每个code 在每个日期(date),对应一个dh(t) 它是该code临近的三天的p的中位数。
注意:上述的计算在code之间不能交叉。
那位高人能出手帮忙,在下感激不尽!
由 specialuse » 2009年 7月 8日 周三 10:19 am
最大最小值的一问,我倒是有了一个解决的办法(我的办法很土,也望高人再指点);但是median的一问还望高人指点一下啊
由 hopewell » 2009年 7月 8日 周三 2:58 pm
看看是这样吗?
data aaa;
   input code date $ p;
   datalines;
1 1-1 1.1
1 1-2 1.2
1 1-3 1.1
1 1-4 1.5
1 1-5 1.7
2 1-1 2.1
2 1-2 2.2
2 1-3 1.6
2 1-4 1.5
2 1-5 1.9
3 1-1 1.3
3 1-2 1.4
3 1-3 1.6
3 1-4 1.1
3 1-5 1.0
;
data bbb (drop=n);
   set aaa;
   by code;
if first.code then n=1;
   else n+1;
   cmp=max(p,lag1(p),lag2(p))-min(p,lag1(p),lag2(p));
   dh=median(p,lag1(p),lag2(p));
   if n lt 3 then call missing(cmp,dh);/*小于3项的时候缺失化*/
run;

由 specialuse » 2009年 7月 8日 周三 5:13 pm
十分感谢hopewell兄,就是这个意思。但我在上面列的数据集是一个样例,处理的实际数据比较大,求中值和最值时面临的样本区间也比较长(比如是一个100日的移动窗口),代码能扩展一下解决这个问题么?
由 hopewell » 2009年 7月 8日 周三 11:51 pm
不知道效率如何?还有更好的方法吗?
/* 设定滞后量 */
%let lag_n=10;

/* 创建模拟数据 */
data raw_data;
   do code=1 to 100;
      do date='01jan09'd to '30jan09'd;
         p=ceil(10*ranuni(123));
         output;
      end;
   end;
   format date yymmdd10.;
run;

/* 拷贝模拟数据 */
data copy_data;
   set raw_data;
   rename code=copy_code
      date=copy_date
      p=copy_p
      ;
run;

/* 使用HASH ITERATOR创建中间变量 hashexp:10hash表的框数*/
/* http://wenku.baidu.com/view/3a067cc7aa00b52acfc7cacf.html相关框数资料*/
data temp_data(drop=copy_code copy_date copy_p rc);
    if _n_=1 then
        do;
           declare hash p_hash(dataset:'copy_data',hashexp:10,ordered:'ascending');
           p_hash.definekey ('copy_code','copy_date');
           p_hash.definedata('copy_code','copy_date','copy_p');
           p_hash.definedone();
           call missing(copy_code,copy_date,copy_p);
           declare hiter p_hiter('p_hash');
        end;
    set raw_data;
   length temp $500;
   flag=0;
    rc=p_hiter.first();
    do while(rc eq 0);
        if (code=copy_code) and (0<=date-copy_date<&lag_n) then
            do;   
            if flag=0 then temp=cat(copy_p);
               else temp=catx(',',temp,copy_p);
            flag+1;
            end;
        rc=p_hiter.next();
    end;
run;
/* 创建宏 */
%macro compute;
   %let dsid=%sysfunc(open(temp_data));
    %let nobs=%sysfunc(attrn(&dsid,nobs));
    %syscall set(dsid);
    %do i=1 %to &nobs;
       %let rc=%sysfunc(fetchobs(&dsid,&i));
      code=&code;
      date=&date;
      p=&p;
      %if &flag=&lag_n %then %do;
            cmp=max(&temp)-min(&temp);
            dh=median(&temp);
         %end;
        output;
   %end;
    %let dsid=%sysfunc(close(&dsid));
%mend;
/* 调用宏 */
data final_data;
   %compute
   format date yymmdd10.;
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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