楼主: evidence
7783 10

[求助]循环语句 [推广有奖]

  • 1关注
  • 0粉丝

已卖:23份资源

本科生

6%

还不是VIP/贵宾

-

威望
0
论坛币
163 个
通用积分
0
学术水平
9 点
热心指数
3 点
信用等级
3 点
经验
1420 点
帖子
40
精华
0
在线时间
93 小时
注册时间
2007-4-15
最后登录
2025-10-8

楼主
evidence 发表于 2007-12-31 15:30:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

现在需要将一些记录扩展为完全相同的几十条记录,请问如何在sas应用循环语句实现?而且结果可以自动保存在数据库(表)中呢?

如果第一条原始记录复制成100条相同记录,第2条原始记录复制成50条记录,然后2次复制的结果要放在同一个数据表中,请问如何实现呢?谢谢各位大侠。

二维码

扫码加我 拉你入群

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

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

关键词:循环语句 SAS应用 自动保存 各位大侠 如何实现 求助 语句

回帖推荐

jingju11 发表于7楼  查看完整内容

6# soporaeternus2 Why macro?

soporaeternus2 发表于6楼  查看完整内容

具体某条记录需要重复多少遍可以再用一张表加宏变量来控制循环中的%to 后面的数字。 这样原始数据集只读取一次,可能效率上更好些

woodolt 发表于2楼  查看完整内容

data a;input x y@@;cards;1 2 3 4 ;run;%macro bb;%do i=1 %to 49;data c;set a _last_;%end;run;%mend bb;%bb这样可实现数据文件c中包含50个a的copy

本帖被以下文库推荐

沙发
woodolt 发表于 2007-12-31 18:51:00

data a;
input x y@@;
cards;
1 2 3 4
;
run;
%macro bb;
%do i=1 %to 49;
data c;
set a _last_;
%end;run;
%mend bb;
%bb

这样可实现数据文件c中包含50个a的copy

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

藤椅
woodolt 发表于 2007-12-31 19:08:00

data a;
input x y@@;
cards;
1 2 3 4
;
run;
data d1;
set a;
if _n_=1;
run;
%macro bb(c,a,n);
%do i=1 %to (&n-1);
data &c;
set &a _last_;
%end;run;
%mend bb;
%bb(data1,d1,100)
data d2;
set a;
if _n_=2;
run;
%bb(data2,d2,50)
data data3;
set data1 data2;
run;

此程序可实现第一条记录重复100遍,第二条记录重复50遍,最后合并保存于data3数据文件中

请求版主加分,初来乍到,穷啊~~~

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

板凳
evidence 发表于 2008-1-1 00:58:00
好人啊,非常感谢,希望版主可以给楼上兄弟加分

报纸
firstknife 发表于 2010-1-22 17:05:13
2楼的程序是关键,受教了

地板
soporaeternus2 发表于 2010-1-22 19:31:03
  1. %MACRO TEST();
  2. data x;
  3.         set a;
  4.         if _N_=1 then do;
  5.         %do i=1 %to 100;
  6.                 output;
  7.         %end;
  8.         end;
  9.         if _N_=2 then do;
  10.         %do i=1 %to 50;
  11.                 output;
  12.         %end;
  13.         end;
  14. run;
  15. %MEND TEST;
  16. %TEST;
复制代码
具体某条记录需要重复多少遍可以再用一张表加宏变量来控制循环中的%to 后面的数字。
这样原始数据集只读取一次,可能效率上更好些
已有 1 人评分学术水平 收起 理由
soporaeternus + 1 实验

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

7
jingju11 发表于 2010-1-23 06:37:00
6# soporaeternus2

Why macro?

  1. data b;
  2. set a;
  3. if _n_ = 1 then do i = 1 to 100;
  4.   output;
  5.   end;
  6. else if _n_ = 2 then do i = 1 to 50;
  7.   output;
  8.   end;
  9. else output;
  10. drop i;
  11. run;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

8
bobguy 发表于 2010-1-23 11:06:42
woodolt 发表于 2007-12-31 19:08
data a;input x y@@;cards;1 2 3 4 ;run;data d1;set a;if _n_=1;run;%macro bb(c,a,n);%do i=1 %to (&n-1);data &c;set &a _last_;%end;run;%mend bb;%bb(data1,d1,100)data d2;set a;if _n_=2;run;%bb(data2,d2,50)data data3;set data1 data2;run;此程序可实现第一条记录重复100遍,第二条记录重复50遍,最后合并保存于data3数据文件中请求版主加分,初来乍到,穷啊~~~
That is overkill. Please read jingju11's solution.

9
hongxx 发表于 2010-1-23 14:43:59
用set没什么效率,每次还得读数据。
用proc append,直接附在数据后面,免去了读数据集里的数据,效率更高。

10
jias2009 发表于 2010-1-24 15:07:46
楼上的同志对|SAS挺精通的啊
受教了啊

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 10:02