楼主: harlon1976
15003 31

[原创博文] 提取数据集的观测数 [推广有奖]

11
harlon1976 发表于 2010-3-22 22:33:23
感谢10楼的帮助,在数据集aaa中你的确解决了问题,但以后我还要调用宏变量m,以及保留需要使用m表示的变量应该如何处理,是否都要这么做呢?
比如下列语句:
proc reg data=hb outest=est(keep=ex1-ex&m);
model y=ex1-ex&m/noint;
output out=b(drop=ex1-ex&m) p=py&xh r=ry;
data plot(rename=(ex1-ex&m=p1-p&m));
set est; do nn=1 to 10;output;end;
我该如何修改呢?请赐教。谢谢!

12
soporaeternus 发表于 2010-3-23 09:37:35
我只有一个笨办法
  1. %MACRO T(VAR,N);
  2.         %do i=1 %to &N %by 1;
  3.                 &VAR&i
  4.         %end;
  5. %MEND T;
复制代码
在你代码任何x1-xn的地方用%T(x,n)来替代,类似的ex1-exn为%T(ex,n)
若n为宏变量&m,则为%T(x,&m)

希望对你有帮助
Let them be hard, but never unjust

13
harlon1976 发表于 2010-3-23 15:48:08
兄弟高人啊,按照你方法,我试了:结果model语句解决了,drop语句也可以了,但rename语句就是不行,按照你方法,应该修改为data plot(rename=(%T(ex,&ls)=%T(p,&ls)));
&ls是提取的数据观测数,实际提取结果为20,在LOG窗口显示:

NOTE: Line generated by the macro variable "I".
1                      ex2
                       ---
                       79

ERROR 79-322: Expecting a =.

我就不明白这个‘=’应该添在什么地方,请兄弟或其他高人再指点一下,谢谢!
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewth ... 2&from^^uid=69002

14
soporaeternus 发表于 2010-3-23 16:24:01
我粗心了,没看见rename选项
rename的话要这样
  1. %MACRO T1(VAR1,VAR2,N);

  2.         %do i=1 %to &N %by 1;

  3.                 &VAR1&i = &VAR2&i

  4.         %end;

  5. %MEND T1;
复制代码
Let them be hard, but never unjust

15
luijb 在职认证  发表于 2010-3-23 16:31:27
我来个复杂而又简单的
%macro temp(in_ds);
   %let dsid=%sysfunc(open(&in_ds,i));
   %let nobs=%sysfunc(attrn(&dsid,nlobs));
   %let rc=%sysfunc(close(&dsid));
%mend;
in_ds 是数据集名称;nobs是你要宏变量及数据集的观测数,你自己测试下啊!
西格玛临床统计服务工作室http://www.sigma-stat.com/,luijb@163.com

16
harlon1976 发表于 2010-3-23 16:55:49
14# soporaeternus
我把T1又添加到程序中,在RENAME 语句中我输入如下程序:
data plot&xh(rename=%T1(ex,p,&ls));
set est&xh; do nn=1 to &n;output;
end;


但LOG窗口显示:
NOTE: Line generated by the macro variable "I".
1                        ex2
                         ---
                         22
ERROR 22-7: Invalid option name EX2.
NOTE: Line generated by the macro variable "I".
1                        ex3
                         ---
                         22
ERROR 22-7: Invalid option name EX3.
NOTE: Line generated by the macro variable "I".
1                        ex4
                         ---
                         22
ERROR 22-7: Invalid option name EX4.
NOTE: Line generated by the macro variable "I".
1                        ex5
                         ---
                         22
ERROR 22-7: Invalid option name EX5.
NOTE: Line generated by the macro variable "I".
1                        ex6
                         ---
                         22
ERROR 22-7: Invalid option name EX6.
NOTE: Line generated by the macro variable "I".
1                        ex7
                         ---
                         22
ERROR 22-7: Invalid option name EX7.
NOTE: Line generated by the macro variable "I".
1                        ex8
                         ---
                         22
ERROR 22-7: Invalid option name EX8.
NOTE: Line generated by the macro variable "I".
1                        ex9
                         ---
                         22
ERROR 22-7: Invalid option name EX9.
NOTE: Line generated by the macro variable "I".
1                        ex10
                         ----
                         22
ERROR 22-7: Invalid option name EX10.
NOTE: Line generated by the macro variable "I".
1                        ex11
                         ----
                         22
ERROR 22-7: Invalid option name EX11.
NOTE: Line generated by the macro variable "I".
1                        ex12
                         ----
                         22
ERROR 22-7: Invalid option name EX12.
NOTE: Line generated by the macro variable "I".
1                        ex13
                         ----
                         22
ERROR 22-7: Invalid option name EX13.
NOTE: Line generated by the macro variable "I".
1                        ex14
                         ----
                         22
ERROR 22-7: Invalid option name EX14.
NOTE: Line generated by the macro variable "I".
1                        ex15
                         ----
                         22
ERROR 22-7: Invalid option name EX15.
NOTE: Line generated by the macro variable "I".
1                        ex16
                         ----
                         22
ERROR 22-7: Invalid option name EX16.
NOTE: Line generated by the macro variable "I".
1                        ex17
                         ----
                         22
ERROR 22-7: Invalid option name EX17.
NOTE: Line generated by the macro variable "I".
1                        ex18
                         ----
                         22
ERROR 22-7: Invalid option name EX18.
NOTE: Line generated by the macro variable "I".
1                        ex19
                         ----
                         22
ERROR 22-7: Invalid option name EX19.
NOTE: Line generated by the macro variable "I".
1                        ex20
                         ----
                         22
ERROR 22-7: Invalid option name EX20.
我还是不知道哪里出问题了,难道是我的写法有问题吗,希望兄弟再给予帮助,叩谢了!

17
harlon1976 发表于 2010-3-23 17:08:55
15# luijb
兄弟啊:我对你的程序还没有仔细学习,但我大概了解了,我为了验证你的程序,编写如下程序:
data a;
input x1-x3@@;
cards;
1 2 3 7 8 8 4 5 5
1 2 2 7 8 5 7 4 2
;
%macro temp(in_ds);
   %let dsid=%sysfunc(open(&in_ds,i));
   %let nobs=%sysfunc(attrn(&dsid,nlobs));
   %let rc=%sysfunc(close(&dsid));
%mend temp(in_ds);
%macro ml;
%temp(a);
data c;
do i=1 to &nobs;
x=normal(0);
output;
end;
proc print;
%mend ml;
%ml;
run;
但结果出错了,是我写错了,请指点。

18
harlon1976 发表于 2010-3-23 19:19:57
17# harlon1976
我查看了SASHELP 找到了这个函数的说明,你在NOBS中多写了一个字母,谢谢你。

19
醉_清风 发表于 2010-3-23 19:25:08
18# harlon1976
这么晚了 还在弄SAS 楼主真是勤奋啊
从来不需要想起 永远也不会忘记

20
harlon1976 发表于 2010-3-23 19:48:38
19# 醉_清风
谢谢你的夸奖,问题还没有解决呢,继续帮助啊1

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 08:25