楼主: lnlhckao123
3619 25

[问答] 200论坛币求请问怎样在特定位置插入一个变量 [推广有奖]

11
邓贵大 发表于 2013-5-4 02:26:14
  1. proc sql;
  2. create table ccc as
  3. select a.*, . as p, b.*
  4. from aaa(keep=a--d) a natural join aaa b;
  5. quit;
  6. *or more elegantly;
  7. data ccc;
  8. if 0 then set aaa(keep=a--d);
  9. retain p .;
  10. set aaa;
  11. run;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
lnlhckao123 + 1 + 1 + 1 热心帮助其他会员
rdwalk + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

12
yongyitian 发表于 2013-5-4 07:53:23
有一个简单有效的常用方法。就是复制(copy)和粘贴(paste)。
请尝试如下. 绝对不会出现错误.

1. 在PROC SQL 后面 添加一个字 feedback, 然后提交如下代码.
        proc sql feedback;
         select *
        from aaa;

2. 进入log窗口,你会发现这样的select语句
       select a, b, c, d, ...........

3. 使用鼠标来选择select a, b, 这一行, 然后点击右键 - >编辑 - 复制

4. 回到编辑窗口, 用鼠标来选择 select * 然后点击右键 - >粘贴

5. 在你需要的地方 键入新的变量 p.



还有一种方法, 就是从地dictionary.columns table 里 把变量名选出来。
运行下面的code,  然后将 results window 中的变量名 复制, 粘贴 到 editor window

proc sql;
    select name
        from dictionary.columns
        where libname = 'WORK' and memname='AAA';    /* 注意大写 */
quit;
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
salacn + 1 + 1 + 1 观点有启发
lnlhckao123 + 1 + 1 + 1 热心帮助其他会员
rdwalk + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

13
Bridgenc 发表于 2013-5-5 01:17:28
data aaa;
input  a   b  c   d   e  f   g    h;
cards;
1     2     3     4     5     6     7     8
2     9     2     6     1     3     2     5
;
run;

data first(keep=a--d id) second(keep=e--h id) third(keep=id p);
  set aaa;
  format id p 8.;
  id=_n_;
run;

data all;
  merge first  third second;
  by id;
  drop id;
run;
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
lnlhckao123 + 1 + 1 + 1 热心帮助其他会员
yongyitian + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

14
Imasasor 发表于 2013-5-5 09:20:33
楼上都弱爆了,以下才是正确方法
  1. data aaa;
  2. input  a   b  c   d   e  f   g    h;
  3. cards;
  4. 1     2     3     4     5     6     7     8
  5. ;
  6. run;

  7. data ccc;
  8. set aaa(keep=a--d);
  9. p=.;
  10. set aaa(keep=e--h);
  11. run;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
lnlhckao123 + 1 + 1 + 1 热心帮助其他会员
yongyitian + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

15
yongyitian 发表于 2013-5-5 11:16:01
版主和楼上的方法很好。 只是如果新加的变量是由其它变量计算得来,而且计算中包括后面的变量的话,就会有问题。比如下面的爬 p2.

data aaa;
input  a   b  c   d   e  f   g    h;
cards;
1  2  3  4  5  6  7  8
;
run;

data ddd;
set aaa(keep=a--d);
p1=a+b;
p2=a+f;
set aaa(keep=e--h);
run;

proc print data=ddd; run;
output

Obs    a    b    c    d    p1    p2   f    e    g    h
1     1    2    3    4     3      .     6    5    7    8
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
lnlhckao123 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

16
Imasasor 发表于 2013-5-5 11:18:24
yongyitian 发表于 2013-5-5 11:16
版主和楼上的方法很好。 只是如果新加的变量是由其它变量计算得来,而且计算中包括后面的变量的话,就会有问 ...
这种事情,多写一个data步就成了嘛
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

17
Imasasor 发表于 2013-5-5 11:19:56
yongyitian 发表于 2013-5-5 11:16
版主和楼上的方法很好。 只是如果新加的变量是由其它变量计算得来,而且计算中包括后面的变量的话,就会有问 ...
或者
data ddd;
set aaa(keep=a--d);
p1=a+b;
p2=a+f;
set aaa(keep=e--h);
p2=a+f;
run;
在最后多写一步就行了
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
lnlhckao123 + 1 + 1 + 1 热心帮助其他会员
yongyitian + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

18
hamn 发表于 2013-5-5 23:26:42
Imasasor方法很好。不过没看到楼主给200币,

19
邓贵大 发表于 2013-5-6 00:45:11
hamn 发表于 2013-5-5 23:26
Imasasor方法很好。不过没看到楼主给200币,
版主的代码看着顺眼,却不是最有效率的,因为他/她/它把同一个数据集开了两遍。还有楼主虽然多金,却还没有足够的判断力,也不必在周末的晚上继续码code。
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

20
hamn 发表于 2013-5-6 22:12:31
邓贵大 发表于 2013-5-6 00:45
版主的代码看着顺眼,却不是最有效率的,因为他/她/它把同一个数据集开了两遍。还有楼主虽然多金,却还没 ...
诚心求有效率的code,谢谢。

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

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