楼主: harlon1976
15113 31

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

  • 2关注
  • 27粉丝

版主

院士

54%

还不是VIP/贵宾

-

威望
1
论坛币
33781 个
通用积分
135.1232
学术水平
25 点
热心指数
39 点
信用等级
17 点
经验
59249 点
帖子
1928
精华
0
在线时间
4352 小时
注册时间
2005-8-27
最后登录
2025-12-9

楼主
harlon1976 发表于 2010-3-22 16:23:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
问题如下:
现有一个数据集,观测数事先并不知道,那么如何提取其观测总数这个数值,同时使用%let语句把它赋给某个宏变量,比如m,以便后面的程序能够调用这个宏变量。
希望路过的高人给予指点,谢谢。
二维码

扫码加我 拉你入群

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

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

关键词:数据集 如何提取 不知道 let 程序 如何

回帖推荐

xiaosanmao 发表于8楼  查看完整内容

%macro mm; data aa; %do i=1 %to &m; x&i=normal(0); output; %end; %mend mm; %mm; proc print data=aa;run;

soporaeternus 发表于10楼  查看完整内容

keep 变量的写法问题,我改了下,希望有用 另外,4楼是解释了下2楼的算法,2楼给出的是正解,一般取data的条数就是这样做的 希望说明白了

本帖被以下文库推荐

沙发
醉_清风 发表于 2010-3-22 17:08:13
data _null_;
       set a nobs=t;
       call symput("m",t);
       stop;
run;
从来不需要想起 永远也不会忘记

藤椅
harlon1976 发表于 2010-3-22 17:19:20
没有看懂什么意思,好像数据集中没有观测啊

板凳
soporaeternus 发表于 2010-3-22 17:25:51
读一下数据集的head,把nobs赋值为一个变量,赋给宏,结束
SAS数据集的条数被记录在head中,读一下就可以了,不需要遍历来算
已有 1 人评分学术水平 收起 理由
醉_清风 + 1 学习了

总评分: 学术水平 + 1   查看全部评分

Let them be hard, but never unjust

报纸
醉_清风 发表于 2010-3-22 17:38:15
harlon1976 发表于 2010-3-22 17:19
没有看懂什么意思,好像数据集中没有观测啊
你要的不是宏变量么?
从来不需要想起 永远也不会忘记

地板
harlon1976 发表于 2010-3-22 17:43:25
如何读,又如何赋给宏变量m呢,4楼高手你就说明白吧,最好给出程序,本人还是没有明白啊 !

7
harlon1976 发表于 2010-3-22 17:49:52
你程序中的宏变量m存储量数据集a的观测总数,是吗?如果是的,我在下面程序中调用宏变量m,程序出错:
%macro mm;
data aa;
do i=1 to &m;
x&i=normal(0);
output;
end;
%mend mm;
%mm;
proc print data=aa;run;
LOG窗口显示:
没有解析符号应用i
请问这是什么原因呢 ?

8
xiaosanmao 发表于 2010-3-22 19:19:19
harlon1976 发表于 2010-3-22 17:49
你程序中的宏变量m存储量数据集a的观测总数,是吗?如果是的,我在下面程序中调用宏变量m,程序出错:
%macro mm;
data aa;
do i=1 to &m;
x&i=normal(0);
output;
end;
%mend mm;
%mm;
proc print data=aa;run;
LOG窗口显示:
没有解析符号应用i
请问这是什么原因呢 ?
%macro mm;
data aa;
%do i=1 %to &m;
x&i=normal(0);
output;
%end;
%mend mm;
%mm;
proc print data=aa;run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

9
harlon1976 发表于 2010-3-22 21:22:15
谢谢楼上兄弟的提醒,我试了你的程序,是对的,但我有稍微修改就出问题了,你再看看:
data a;
input x@@;
cards;
1 2 3 4 3
; data _null_;
       set a nobs=t;
       call symput("m",t);
       stop;
run;
%macro mm;
data aaa(keep=x2-x&m);
%do i=1 %to &m;
x&i=normal(0);
output;
%end;
%mend mm;
%mm;
proc print data=aaa;run;
log窗口显示:
x does not have a numeric suffix
如果不使用keep语句则正常,这又是什么原因呢。

10
soporaeternus 发表于 2010-3-22 21:51:52
  1. data a;
  2. input x@@;
  3. cards;
  4. 1 2 3 4 3
  5. ; data _null_;
  6.        set a nobs=t;
  7.        call symput("m",t);
  8.        stop;
  9. run;
  10. %put &m;
  11. %macro mm;
  12. data aaa(keep=%do i=1 %to &m %by 1;x&i %end;);
  13. %do i=1 %to &m %by 1;
  14. x&i=normal(0);
  15. %end;
  16. output;
  17. %mend mm;
  18. %mm;
  19. proc print data=aaa;run;
复制代码
keep 变量的写法问题,我改了下,希望有用

另外,4楼是解释了下2楼的算法,2楼给出的是正解,一般取data的条数就是这样做的
希望说明白了
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

Let them be hard, but never unjust

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

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