楼主: ertyuj
1553 6

重金悬赏:帮忙给写一个SAS macro来处理重复的数据文件操作 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
254 个
通用积分
0.7615
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
-351 点
帖子
136
精华
0
在线时间
164 小时
注册时间
2007-2-7
最后登录
2022-3-17

100论坛币

恳请各位大侠,帮忙给写一个SAS macro来处理重复的数据文件操作。如果在写这个macro的时候果被卡到了什么地方,没有关系,即使只是提供部分方案,我也感激不尽,100个论坛币悬赏照送。此外,写这个macro完全没有必要了解任何的统计知识。这个macro完全是个数据文件操作问题(data step, proc sql)。

正文如下:
我有一个数据文件,my_data,包含一个y变量和上百个x变量。为了举例方便,这里用3个x变量来演示。下边这个程序生成我的数据文件,my_data。

DATA my_data;
INPUT y x1 x2 x3;
DATALINES;
10        1       1        1
20        1       2        2
30        2       3        3
40        2       4        4
50        3       4        4
60        3       5        4
70        4       5        5
80        4       6        5
90        5       7        6
;
RUN;

我把(x1 x2 x3)这个组合放入到下边这段程序中,这段程序会生成一个数据文件,model_parms。(你只需要知道这些就足够了)。

PROC REG DATA=my_data;
MODEL y=x1 x2 x3; *
对于不同x变量组合,这是唯一需要改动的一行程序;
ODS OUTPUT ParameterEstimates=model_parms;
RUN;QUIT;

对于生成的这个数据文件,model_parms,稍作如下处理。
DATA model_parms;
SET model_parms;
KEEP Variable Estimate Probt;
IF Variable NE "Intercept";
RUN;

对于生成的这个数据文件,model_parms,我只看两个东西:


1是看x变量的符号对不对(所有x变量的估计参数都应该是负号)。通过观察Parameter Estimate,我发现2/3(或者66%)的参数符号不对(x1,x2符号不对,x3符号对了)。


2是看P-Value是不是小于0.05。通过观察Pr > |t|,我发现2/3(或者66%)的参数的P-Value小于0.05(x1,x2的P-Value小于0.05,x3的P-Value大于0.05)。

目前为止,我只看了一种x变量的组合情况,即(x1 x2 x3)这个组合。

下面,

我还需要看(x1 x2)这个组合(只需把上面的MODEL y=x1 x2 x3 这行程序变动成为MODEL y=x1 x2)。

我还需要看(x2 x3)这个组合(只需把上面的MODEL y=x1 x2 x3这行程序变动成为MODEL y=x2 x3)。

最后,我要把这些x变量的组合按照这个数据文件,model_parms,符号正确率和P-Value小于0.05率,来排一下序,选出一个最佳x变量的组合对于这个最佳x变量的组合来说,其估计参数的符号正确率最高,而且P-Value小于0.05的率同样的高。

请大侠帮帮忙,把上面的这个例子写成一个macro。这个macro不需要遍历所有x变量的组合, 用户可以指定x变量的各种组合。在这个例子了,我要看看,下面这3个x变量的组合,哪个最好:(x1 x2 x3)这个组合,(x1 x2)这个组合,还是(x2 x3)这个组合?

如果我有什么地方解释的不清楚,尽情按照你的理解来写这个macro即可。说一千,道一万,我的根本问题是,给定一些x变量的组合,按照符号正确率和P-Value小于0.05率找到个最好的那个组合:(x1 x2 x3)这个组合,(x1 x2)这个组合,还是(x2 x3)这个组合?

最佳答案

playmore 查看完整内容

你这里就一个遍历回归,再加一个结果的筛选 后者没有必要和前者放在一个宏里 我这里就大概说下前者 你不需要全部遍历,如果你把需要遍历自变量放在一个表里,如下所示: x1 x2 x3 x4 ... x88 1 1 0 0 ... 0 即一行就是一种情况,=1代表取这个变量,否则=0,那么可以用下面的宏来解决你的问题 %macro IterReg(SourceTable,VarTable,YVar,TargetTable); data IR_VarList(drop=i); set &VarTable; ...
关键词:Macro 数据文件 重金悬赏 文件操作 CRO 回归分析 程序 最好
数据科学和机器学习博客:https://shorturl.at/jtHTW
沙发
playmore 发表于 2013-6-24 11:22:46 |只看作者 |坛友微信交流群
你这里就一个遍历回归,再加一个结果的筛选
后者没有必要和前者放在一个宏里
我这里就大概说下前者

你不需要全部遍历,如果你把需要遍历自变量放在一个表里,如下所示:
x1 x2 x3 x4 ... x88
1   1   0  0  ...  0
即一行就是一种情况,=1代表取这个变量,否则=0,那么可以用下面的宏来解决你的问题

%macro IterReg(SourceTable,VarTable,YVar,TargetTable);

data IR_VarList(drop=i);
        set &VarTable;
        array xs{*} x:;
        length Var_Name $100;
        Var_Name='';
        do i=1 to dim(xs);
                if xs{i} EQ 1 then Var_Name=catx(' ',Var_Name,vname(xs{i}));
        end;
        N=_N_;
run;

proc sql noprint;
        select COUNT(*) into :IR_IterTime from &IR_VarList;
quit;

%do i=1 %to &IR_IterTime;
        proc sql noprint;
                select Var_Name into :IR_VarName
                        from IR_VarList
                        where N=&i;
        quit;

        proc reg data=&SourceTable outest=IR_Result noprint;
                model &YVar = &IR_VarName / EDF ADJRSQ;
        quit;

        %if &i EQ 1 %then %do;
               data &TargetTable;
                       set IR_Result;
               run;
        %end;
        %else %do;
               proc append base=&TargetTable data=IR_Result;
               quit;
         %end;
%end;

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

使用道具

藤椅
boe 发表于 2013-6-24 12:09:51 |只看作者 |坛友微信交流群
每一行做y与x1 x2....的回归?
Gorgeous girl , I love !

使用道具

板凳
ertyuj 发表于 2013-6-24 12:24:19 |只看作者 |坛友微信交流群
对,每一行都做y与x1 x2....的回归,
y=x1 x2 x3 x4 ...
y=x2 x3 x5 x8 ...y=x2 ...
y= x5 x8 ...
y=x2 x3 x8 ...
.
.
.
不要试图使用proc reg的某些功能,因为这里只是以proc reg 为例。按照我在例子里讲的,需要设计一个几乎基于数据文件操作(data step, proc sql)的一个macro来实现。没有必要使用任何回归方面的知识。
谢谢关注和回复。
数据科学和机器学习博客:https://shorturl.at/jtHTW

使用道具

报纸
823954913 发表于 2013-6-24 16:20:03 |只看作者 |坛友微信交流群
为啥不用selection=forward选项呢?

使用道具

地板
ertyuj 发表于 2013-6-24 21:35:20 |只看作者 |坛友微信交流群
不要试图使用proc reg的某些功能,因为这里只是以proc reg 为例。最终我使用其他回归程序,这里只是以proc reg 为例来说明我的问题。
数据科学和机器学习博客:https://shorturl.at/jtHTW

使用道具

7
jolterheadmmtt 发表于 2013-8-13 17:20:07 |只看作者 |坛友微信交流群
mark

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-29 04:42