楼主: oxwolf
2735 9

[原创博文] 请求sas中输出的问题 [推广有奖]

  • 0关注
  • 0粉丝

svip1

已卖:25份资源

本科生

36%

还不是VIP/贵宾

-

威望
0
论坛币
2858 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2187 点
帖子
52
精华
0
在线时间
126 小时
注册时间
2009-9-7
最后登录
2022-12-9

楼主
oxwolf 发表于 2010-7-5 15:52:31 |AI写论文
10论坛币
在sas中生成了table s1和s2,各有2列,我想新生成一个table:my_data,把s1和s2的第二列粘贴过来放在my_data中,请问怎么编程实现。

比如:
s1    2010-3-1          334
          2010-3-2         786
          2010-3-3         378

s1    2010-3-1         124
          2010-3-2         346
          2010-3-3         675

要生成my_data:
334    124
786    346
378    675

关键词:Table Data ABLE 怎么编程 ABL 怎么编程

回帖推荐

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

data s1; input date $9. num@; datalines; 2010-3-1 334 2010-3-2 786 2010-3-3 378 ; run; data s2; input date $9. num@; datalines; 2010-3-1 124 2010-3-2 346 2010-3-3 675 ; run; /* ********用sort+merge************************************************************************ proc sort data=s1 out=s1(rename=(num=num1)); by date; ...

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2010-7-5 15:55:30
data s1;
    input date $ col1;
    datalines;
2010-3-1          334
2010-3-2         786
2010-3-3         378
;
data s2;
   input date $ col2;
   datalines;
2010-3-1         124
2010-3-2         346
2010-3-3         675
;
data my_data;
    merge s1 s2;
by date;
keep col1 col2;
run;
已有 1 人评分论坛币 收起 理由
crackman + 20

总评分: 论坛币 + 20   查看全部评分

和谐拯救危机

藤椅
oxwolf 发表于 2010-7-6 10:27:55
我想请问一下,因为s1和s2是sas输出的table,第一列是日期,第二例分别是num for s1 和num for s2,我使用merge的时候,keep num for s1  num for s2发生了错误,我想是因为num for s1这个label名称之间有空格, 请问该怎么修改呢
欢迎大家交流数量金融

板凳
pobel 在职认证  发表于 2010-7-6 10:44:16
一般SAS变量名只能包括字母,数字和下划线(以字母或下划线开头),不能有空格。
Keep num_for_s1 num_for_s2;
和谐拯救危机

报纸
oxwolf 发表于 2010-7-6 13:13:11
谢谢楼上的回答。s1和s2是forecast模块输出的,因此s1的第二列自动命名为num for s1,请问有什么方法处理吗?感谢您的回答
欢迎大家交流数量金融

地板
pobel 在职认证  发表于 2010-7-6 13:45:00
"num for s1" 应该是变量的label吧,keep语句需要用变量名。

或者用drop date;语句。
和谐拯救危机

7
oxwolf 发表于 2010-7-6 14:07:12
谢谢您的回答,确实是label。现在的麻烦是由sas输出的s1,s2.。。。。等table中第二列的name都是num,这样怎么才能合并呢?改name?谢谢您的回答。
btw:我怎么才能再赠送您论坛币呢
欢迎大家交流数量金融

8
crackman 发表于 2010-7-6 14:08:30
data s1;
input date $9. num@;
datalines;
2010-3-1         334
2010-3-2         786
2010-3-3         378
;
run;
data s2;
input date $9. num@;
datalines;
2010-3-1         124
2010-3-2         346
2010-3-3         675
;
run;
/*        ********用sort+merge************************************************************************
proc sort data=s1 out=s1(rename=(num=num1));
by date;
run;
proc sort data=s2 out=s2(rename=(num=num2));
by date;
run;
data result;
merge s1 s2;
by date;
drop date;
run;
*/
/*        *******SQL***********************************************************************************
proc sql;
create table resultsql as select s1.num as num1,s2.num as num2 from s1 join s2 on s1.date=s2.date;
quit;
*/
/*        APPEND+LAG*************************************************************************************
proc append base=s1 data=s2;
run;
data s1;
set s1;
num1=lag3(num);
if num1^=.;
drop date;
run;
*/
已有 1 人评分热心指数 收起 理由
pobel + 1 精彩帖子

总评分: 热心指数 + 1   查看全部评分

9
crackman 发表于 2010-7-6 23:41:07
还有一个方法就是
data s1;
input date $9. num@;
datalines;
2010-3-1         334
2010-3-2         786
2010-3-3         378
;
run;
data s2;
input date $9. num@;
datalines;
2010-3-1         124
2010-3-2         346
2010-3-3         675
;
run;
data _null_;
set s2;
call symput("num"||left(_n_),num);
run;
data s1;
set s1;
num2=symget("num"||left(_n_));
drop date;
run;

10
oxwolf 发表于 2010-7-7 09:33:59
非常感谢版主啊,解决了
欢迎大家交流数量金融

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

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