全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4857 4
2012-11-18
悬赏 200 个论坛币 已解决
不好意思,又来问了,想的简单,但是自己动手做起来,有的细节就是过不去,在网上也不好找,蓝皮书上也正好没有说到。

问题描述:

首先是在一个宏内的操作,我有10个观测,3个变量(例如abc);我现在已经从上文中得到了30个宏变量(&a1-&a10;&b1-&b10;&c1-&c10)。

目的:产生一个如下data数据集(只列出1,2和10):

N a b c
n1
1(也就是&a1) 21
n2 1 2(也就是&b2)2
n10 2 1 1(也就是&c10)


我再描述下这个data数据集:
共10(&n)行,共4列(包括一列名称N)

谢谢老师们,老麻烦大家。

附:我现在在create table步就卡死了:

proc sql;
create table result(
n1 num,n2 num,n10 num       //这一步我想用(n1-n&v num)或者(n(&v) num),好像都异想天开了
);
insert into result       //这一步还没到呢,我想abc三种做法的30个宏变量10个10个插入进去,下面再转置
set ...
/*select _all_ from result;*/
quit;

最佳答案

pobel 查看完整内容

你想的方法应该是这样吧: %macro insert(n=,var=); insert into test set %do i=1 %to &n; %if &i ne 1 %then ,; n&i=&&&var&i %end; ; %mend; options mprint; proc sql; create table test (n1 num,n2 num,n3 num, n4 num, n5 num, n6 num, n7 num, n8 num, n9 num,n10 num ); %insert(n=10,var=a) %insert(n=10,var=b) %insert(n=10,var=c) quit; proc transpose data=test out ...
二维码

扫码加我 拉你入群

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

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

全部回复
2012-11-18 00:12:31
Tigflanker 发表于 2012-11-18 10:14
感谢pobel !可行!能否帮我用SQL的方法走一遍,我想学习一下,感谢!!

1.就是create table后面括号中 ...
你想的方法应该是这样吧:
%macro insert(n=,var=);
insert into test set
%do i=1 %to &n;
   %if &i ne 1 %then ,;
  n&i=&&&var&i
%end; ;
%mend;

options mprint;

proc sql;
         create table test
         (n1 num,n2 num,n3 num, n4 num, n5 num, n6 num, n7 num, n8 num, n9 num,n10 num );
         %insert(n=10,var=a)
         %insert(n=10,var=b)
         %insert(n=10,var=c)
quit;

proc transpose data=test out=test1;
run;
二维码

扫码加我 拉你入群

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

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

2012-11-18 09:13:40
DATA步可不可以?

%let n=10;
data test;
    do i=1 to &n;
           n=cats("n",i);
           a=symget(cats("a",i));
           b=symget(cats("b",i));
           c=symget(cats("c",i));
           output;
        end;
        drop i;
run;
二维码

扫码加我 拉你入群

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

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

2012-11-18 10:14:25
pobel 发表于 2012-11-18 09:13
DATA步可不可以?

%let n=10;
感谢pobel !可行!能否帮我用SQL的方法走一遍,我想学习一下,感谢!!

1.就是create table后面括号中的内容,能否设置从n1至n&v 的v个NUM型

2.就是后面insert 。。。 set那个地方,你知道有什么办法一次插入&v个数值么

感谢。
二维码

扫码加我 拉你入群

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

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

2012-11-18 10:25:43
%macro insert(n=,data=);
%do i=1 %to &n;
insert into &data values("n&i",&&a&i,&&b&i,&&c&i);
%end;
%mend;

proc sql;
create table test
(n char(5),a num,b num,c num);
%insert(n=10,data=test);
quit;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群