楼主: Tigflanker
4879 4

[问答] 【已解决】求助一个SQL的insert相关问题 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.9128
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

楼主
Tigflanker 发表于 2012-11-18 00:12:30 |AI写论文
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 ...
关键词:insert ert sql 已解决 proc sql insert
Bye SAS.
若有缘,能重聚。

沙发
pobel 在职认证  发表于 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;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 意思应该差不多,前面的data步挺好的。

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

和谐拯救危机

藤椅
pobel 在职认证  发表于 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;
和谐拯救危机

板凳
Tigflanker 发表于 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个数值么

感谢。
Bye SAS.
若有缘,能重聚。

报纸
ziyenano 发表于 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;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 感谢感谢!很巧妙,有启示。

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

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

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