我对SAS非常陌生,并且很难定义一个全局变量,这个变量可以在我的程序中的许多sql procs中使用。
%LET似乎在我的程序中具有一个非全局范围。我只想声明一个变量一次,而不是有很多%LET语句。我的程序有许多用于不同类型事务监视的SQL procs。例如,目前我有多个proc sqls从相同的表中为各种仪器提取数据,但我想定义一个阈值,其中声明了一个静态值,如下所示:
%let x=10000;
Proc sql;
Select trans_amount, country from transactiontable
where trans_amount > &x
And i
我首先编写了一个proc SQl,通常没有任何宏变量,它可以工作,现在我想把它转换成宏,但是它不工作,你能看到问题出在哪里吗?
%macro macrova(LIB=, DATA=);
proc sql noprint;
/*creating an in memory variable with all char variables from the dataset*/
select name into :names separated by ' '
from dictionary.columns where libname="&a
我想使用SAS Proc SQL在一个表中查找行,在这个表中,每一列都有一个非缺失值。有没有一种方法可以做到这一点,而不必列出所有的列名?这不起作用,但它可能会让您了解我的预期输出是什么。
Proc SQL;
Select *
from work.table
Where * is not null;
Run;
如果可能的话,我还想将结果限制在一个观察结果上。谢谢。
我有一个程序,应该合并任意数量的表连续编号。我试图使用宏变量,但没有效果。“在编号数据集列表中缺少数字后缀”的错误不断出现。
这是有缺陷的代码:
DATA INPUTF;
INPUT DSN $;
CARDS;
forum1
forum2
forum3
;
RUN;
DATA forum1;
INPUT contact $ forum1 $;
CARDS;
Mash HERE
Greg HERE
Bob HERE
;
PROC SORT DATA=forum1;
BY contact;
RUN;
DATA forum2;
INPUT
我试图创建一个宏来输出一个特定数据集的所有变量的列表。在我的宏中,我使用PROC。代码在%macro之外运行正常,但是错误消息表示SELECT语句在%MACRO中使用时无效。
以下是一个例子:
proc sql noprint;
select name into :vlist separated by ' '
from dictionary.columns
where memname = upcase("&dsn");
quit;
%put &vlist;
上述三种方法均能很好地工作;
但
%macro
SAS相对较新,但我遇到了一个不寻常的问题。我使用一些proc语句动态创建一个基于最近一个月的变量。我想从其中检索的表的中间有一个月名,我想遍历它。例如LIBRARY.TABLE_JAN17_ALL,LIBRARY.TABLE_DEC16_ALL等。
示例代码:
DATA qtrMonth;
INPUT vDay vMonth vMonthName $;
DATALINES;
31 01 JAN
28 02 FEB
31 03 MAR
30 04 APR
31 05 MAY
30 06 JUN
31 07 JUL
31 08 AUG
30 09 SEP
31 10 OCT
30 11 N
我正在尝试创建一个宏,其中一个参数是一个列表。我的宏包含一个带有where语句的proc sql,其内容如下:
Where Name in ('sarah','ben','adam')
我试着这样做:
%MACRO DATA_PULL (name=);
PROC SQL;
SELECT
FROM
Where Name in &name
;
QUIT;
%MEND DATA_PULL;
%DATA_PULL (Name=('sarah','ben','adam'))
但它不起作用:(感谢任何
我现在正在使用一个proc sql来连接到我的数据库(access .accdb),并且它正在工作。到目前为止,我只用它来做SELECT查询。下面是一个有效的例子,我用它来做这件事。
proc sql;
/* create an ODBC pass-through connection using the Microsoft Office Access 2007 .accdb driver */
connect to ODBC as savesdb
(required="driver=Microsoft Access Driver (*.mdb, *.accdb); db
如果不注释哪里的fc(),下面的查询就不能工作。
WITH
FUNCTION ft
RETURN VARCHAR2 SQL_MACRO(table)
IS
BEGIN
RETURN q'{
ta
}';
END;
FUNCTION fc
RETURN VARCHAR2 SQL_MACRO(scalar)
IS
BEGIN
RETURN q'{
1=1
}';
END;
ta(v) as (selec
我希望根据满足特定条件的相似变量范围来选择行: proc sql;
create table2 as
select * from table1
where proc1 in ('111', '222', '333') or
proc2 in ('111', '222', '333') or
proc3 in ('111', '222', '333');
quit; 有没有更有效地选择变量的方法?在SAS的
我有一张桌子叫桌子。
Name Number
Price A 10
Price B 11
Quantity A 12
Quantity B 13
如何编写Proc代码,其中我创建了一个变量,表示%let Variable = "Price",然后这样说
我正在从表中创建一个名为选择的表。
Proc SQL;
Create Table Selection As
Select *
From Tabling
Where Name Contains %
我在一个SAS项目中工作,在这个项目中我被要求对行进行求和。下面是我的代码:
proc sql;
create table total as
select
sum(ans1) as sum1,
sum(ans2) as sum2,
sum(ans3) as sum3,
sum(ans4) as sum4
from proj.scores;
quit;
我的问题是有150个变量(标记为ans1-ans150)。有没有一种方法可以将它们相加,而不需要一直到150呢?
我有一个这样的客户调查数据:
data feedback;
length customer score comment $50.;
input customer $ score comment & $;
datalines;
A 3 The is no parking
A 5 The food is expensive
B . I like the food
C 5 It tastes good
C . blank
C 3 I like the drink
D 4 The dessert is tasty
D 2 I don
我有一个宏,由"PROC SQL by示例“激发,该宏基于单个列/字段查找重复行:
data have ;
input name $ term $;
cards;
Joe 2000
Joe 2000
Joe 2002
Joe 2008
Sally 2001
Sally 2003
; run;
%MACRO DUPS(LIB, TABLE, GROUPBY) ;
PROC SQL ;
CREATE TABLE DUPROWS AS
SELECT &GROUPBY, COUNT(*) AS Duplicate_Rows
FR
我试图在PROC上使用一个变量,但我无法在互联网上找到合适的方法。我只想在PROC SQL上应用以下to代码:
declare @example as int;
set @example=2;
select * from {table} where {column}=@example;
go
如何将此代码应用于PROC?
基于此,我可以使用以下代码获得程序中已编译的宏的列表,这些宏按第一次出现的顺序排序:
%macro FirstMacro();
%put Hello, World!;
%mend;
%macro SecondMacro();
%put Goodbye, cruel world!;
%mend;
proc sql;
select objname, created
from dictionary.catalogs
where objtype='MACRO' and libname ^= 'SASHELP'
order by created
我想编写一个proc sql查询,它将只选择那些存在于数据集中的变量 我在堆栈溢出上找到了一个答案,并试图实现它,但对我来说不起作用。 proc sql noprint;
select cats('a.', name) into :varlist separated by ','
from dictionary.columns
where libname='WORK' and memname='display_type_transposed' and name in
('_4','_5',