x***I 发帖数: 91 | 1 最近在看sas programing in pharmaceutical industry.
看到作者用proc sql合并datasets,可是不知道为什么,最后一个记录出不全。
自己运行一下他的程序也是一样的,我用的是SAS9.2.
这个有什么办法解决么。
Program 4.8 Performing a Many-to-Many Join with PROC SQL
**** ADVERSE EVENTS;
data aes;
informat ae_start date9. ae_stop date9.;
input @1 subject_id $3.
@5 ae_start date9.
@15 ae_stop date9.
@25 adverse_event $15.;
datalines;
101 01JAN2004 02JAN2004 Headache
101 15JAN2004 03FEB2004 Back Pain
102 03NOV2003 10DEC2003 Rash
102 03JAN2004 10JAN2004 A... 阅读全帖 |
|
s********1 发帖数: 54 | 2 Compare data inf123 and data inf, who can explain to me why outputs from
these two codes are not the same? Data inf is the right one. In terms of the
difference, they are represented as follows:
In data inf123
length readd $10.;/*先把長度都開好*/
input group id_n name $ job $12. st_time $10.;
In data inf
length job $12 readd $10 st_time $10;/*先把長度都開好*/
input group id_n name $ job $ st_time $;
______________________________________________
data inf123 ;
length readd $10.;/*先把長度都開好*/
... 阅读全帖 |
|
l**********8 发帖数: 305 | 3
************************************************************
上个完整的LOG, 谢谢大家了
****************************************************************
NOTE: PROCEDURE PRINTTO used (Total process time):
real time 0.00 seconds
cpu time 0.01 seconds
25
26 *-----------------------------------------------------;
27 %macro process(year,yr,file,first,numobs);
28
29 data cartemp;
30 set loc.carl&year.
31 (firsto... 阅读全帖 |
|
s******y 发帖数: 352 | 4 %let somedt1=21APR2011;
%let somedt2=01Jun2011;
%put current session date: &sysdate;
%put &somedt1. > &sysdate.? %eval(%sysfunc(inputN(&somedt1,date9))>%sysfunc
(inputN(&sysdate.,date9)));
%put &somedt2. > &sysdate.? %eval(%sysfunc(inputN(&somedt2,date9))>%sysfunc
(inputN(&sysdate.,date9)));
BAOZI please!! |
|
h********o 发帖数: 103 | 5 Try this:
==============================
DATA ONE;
INPUT ID STARTDATE : DATE9. ENDDATE : DATE9. VALUE;
FORMAT STARTDATE ENDDATE DATE9.;
CARDS;
1 01JAN2011 07JAN2011 1000
1 08JAN2011 13JAN2011 500
1 14JAN2011 18JAn2011 1000
2 28DEC2010 02JAN2011 1000
2 02JAN2011 15JAN2011 500
;
DATA TWO (KEEP = ID DATE VALUE);
SET ONE;
FORMAT DATE DATE9.;
DO DATE = STARTDATE TO ENDDATE;
OUTPUT;
END;
RUN;
PROC PRINT DATA = TWO NOOBS;
VAR ID DATE VALUE;
RUN; |
|
G********L 发帖数: 12 | 6 82 data bworkhos.carclaimlist&year.;
83 set all_files;
84 run;
85
86 *date_new = input(expnsdt1, date9.);
87 input expnsdt1 date9.;
88 put expnsdt1;
89 run;
其他的不知道,这几行肯定有问题。data step在84行的run之后就结束了。我猜你需要
把87-89行也像86行一样comment out才行。需要用date9 format的话,在83行后面加上
format expnsdt1 date9.;就可以了。 |
|
s******r 发帖数: 1524 | 7 data ttt;
format datee date9. date_week date9. date_week22 date9.;
do i =1 to 33;
datee='01Aug2013'd + i;
date_week=datee-weekday(datee)+1;
date_week22=int((datee-2) /7)*7+2;
output;
end;
drop i;
run; |
|
I**A 发帖数: 96 | 8 如果把date的格式写成date10就可以,date9 or date11 都不行。
input Date date10. Open High Low Close Volume AdjClose;
但是原始数据05Mar2009用date9应该可以。长工可否解释一下。 |
|
b******e 发帖数: 539 | 9 suppose date1 = '19600210', use:
date2 = input(date1, yymmdd8.);
to convert '19600210' to a SAS date.
you can format date2 to any date format you want. for example, you can use
date9:
format date2 date9.;
then date2 will be shown as 10feb1960 |
|
R*********i 发帖数: 7643 | 10 Why it has to be sql? :-)
Assuming the variable rxdate is a numeric SAS date variable:
proc sql;
select coalesce(a.oldid1,b.oldid2) as id,
min(a.rxdate) as adate format=date9.,
min(b.rxdate) as sdate format=date9.,
(calculated adate>.) as ATORVASTATIN,
(calculated sdate>.) as SIMVASTATIN,
(.
from test(rename=(id=oldid1) where=(drugdesc='ATORVASTATIN')) a full
join
test(rename=(id=oldi... 阅读全帖 |
|
h********o 发帖数: 103 | 11 How does it not work for you???
data one;
input date : date9.;
format date date9.;
cards;
01FEB2009
02FEB2009
03FEB2009
04FEB2009
05FEB2009
;
data two;
set one;
if date > "02FEB2009"d then date = "01JAN2010"d;
run;
proc print data = two;
run;
The SAS System
Obs date
1 01FEB2009
2 02FEB2009
3 01JAN2010
... 阅读全帖 |
|
f*******i 发帖数: 8492 | 12 我现在已有一个sas格式现成的data sheet
其中date1的格式是这样的 21MAY2001:00:00:00
但这组数据是character, 而不是date value
所以我需要把这组数据转换成sas的date value,并且减去 "01JAN2001"得到差值
我的code如下:
data homework10;
set class.homework10;
date2=input(date1,date9.);
format date2 date9.;
range=date2-'01JAN2001'dt;
run;
proc print data=homework10;
var date1 date2 range;
run;
现在我的问题,经过打印,我得到的date2确实只是date1里面的日期部分
1. 我所有的date2数值理论上都是大于01JAN2001这个值的,但是得出的range都是负值
,这事怎
么回事? 比如“-1277926548”。
2. 如何把range这个数据以“天数”的形式表示?
谢谢 |
|
s******y 发帖数: 352 | 13 what about this?
%sysfunc(inputN(&somedt2,date9))>%sysfunc(inputN(&sysdate.,date9)) |
|
t*****2 发帖数: 94 | 14 如下:
DATA date;
INPUT calendar gender $;
CARDS;
14567 M
14524 F
14570 M
15516 M
RUN;
------
DATA NEW;
SET date;
format calendar date9.;
PUT 'YEAR: ' year(15516) ;
RUN;
在LOG里一直说SYNTAX错了。但是改成这样:
DATA NEW;
SET date;
format calendar date9.;
Y=year(15516)
PUT 'YEAR: ' y ;
RUN;
就没有问题了。这到底是什么情况?为什么YEAR不能放在PUT statement里呢?
谁能为我解忧呢? O.0?
谢谢 |
|
l****u 发帖数: 529 | 15 try this one, maybe it works
data new;
input @1 startdate date9. @11 stopdate date9.;
cards;
29Mar2007 02Apr2007
15Apr2007 20Apr2007
15Mar2007 18Mar2007
30Mar2007 31Mar2007
18Apr2007 21Apr2007
25Mar2007 30Mar2007
;
run;
proc sql;
select startdate into:var1 separated by' ' from new;
select stopdate into:var2 separated by' 'from new;
select count(*) into: num from new;
quit;
%let total=%eval(&num.*&num);
data new1;
array start [ &num.] (&var1.);
array stop [ &num.] (&var2.);
array ... 阅读全帖 |
|
o*******w 发帖数: 2310 | 16 A raw data file is listed below.
----|----10---|----20---|----30
son Frank 01/31/89
daughter June 12-25-87
brother Samuel 01/17/51
The following program is submitted using this file as input.
data work.family;
infile file-specification;
run;
Which INPUT statement correctly reads the values for the variable BIRTHDATE
as SAS date values?
A. input relation $ first_name $ birthdate date9.;
B. input relation $ first_name $ birthdate mmddyy8.;
C. input relation $ first_na... 阅读全帖 |
|
z*******4 发帖数: 8 | 17 data date;
input x : mmddyy10.;
datalines;
01/01/2012
;
data date;
set date;
y=substr(put(x, date9.),3);
run;
proc print data=date;
format x date9.;
run; |
|
k*******a 发帖数: 772 | 18 data a;
input date date9. akanr akber ;
format date date9.;
datalines;
31mar1999 1 2
30jun1999 2 3
30sep1999 4 5
31dec1999 1 2
;
run;
proc transpose data=a out=b;
by date;
var akanr akber;
run;
最后的结果排排序,该改名就可以了。 |
|
l****u 发帖数: 529 | 19 data yourdata;
set yourdata;
week=substr(put(date-weekday(date)+1,date9.),1,5)||'to'||
substr(put(date+7-weekday(date),date9.),1,5);
run; |
|
l****u 发帖数: 529 | 20 share my code:
data step + proc sql:
proc sort data=one; by id startdate; run;
data one; set one;
by id;
t+((startdate-lag(enddate))>30)-t*first.id;
run;
Proc sql;
create table two as
select distinct id, min(startdate) format=date9.,
max(enddate) format=date9.
from one;
group by id, t;
quit; |
|
l****u 发帖数: 529 | 21 Pure proc sql:
proc sql;
create table b as
select b.id,b.startdate as strtdt
from one a, one b
where a.id=b.id and a.startdate-b.enddate>30 and
monotonic(a.id)=monotonic(b.id)+1;
quit;
proc sql;
create table c as
select one.id, one.startdate, sum(one.startdate>strtdt) as cont
from one left join b
on one.id=b.id and one.startdate>b.strtdt
group by one.id, strtdt;
quit;
proc sql;
create table d as
select distinct a.id, min(a.startdate) format=date9.,
... 阅读全帖 |
|
x******7 发帖数: 122 | 22 几个小时前考了BASE, 内容几乎可以认为全部来自题库50+70+123,62题中大概20题
可以认为是变体
错了3题,大概知道错了下面两题/三题 顺便回忆了其它的一些题
1.
data temp;
infile xxx;
date="01feb1980"d
how to generate ship_note in the form “Feb 01, 1980”
A.ship_note=put(date,date9.)
B.ship_note=put(date,date9.,worddate20.)
C.ship_note=put(date,worddate20.)
D.ship_note=input(.....)
我选了错误答案B,
2.
x y
5 1
4 6
5 4
data one two other;
if x ge 5 then output one;
else if y le 5 then output two;
else output other;
How many obs in dataset one, two and other?
毫不犹豫选... 阅读全帖 |
|
l**********8 发帖数: 305 | 23 就是debug不出来,大神们救我啊
******************* 完整的 CODE ***************
%let dataloc = /disk/agedisk1/medicare/data/20pct/car;
libname bworkhos "/disk/agebulk5/medicare.work/lbaker-DUA23466/ausmita/temp"
;
*libname temp "/disk/agebulk5/medicare.work/lbaker-DUA23466/lbaker/data/xw";
ods listing file = "/disk/agebulk5/medicare.work/lbaker-DUA23466/ausmita/
temp/carrier_12222015.lst";
proc printto
log="/disk/agebulk5/medicare.work/lbaker-DUA23466/ausmita/temp/carrier_
12222015.log";
run;
*--------------... 阅读全帖 |
|
l**********8 发帖数: 305 | 24 就是debug不出来,大神们救我啊
******************* 完整的 CODE ***************
%let dataloc = /disk/agedisk1/medicare/data/20pct/car;
libname bworkhos "/disk/agebulk5/medicare.work/lbaker-DUA23466/ausmita/temp"
;
*libname temp "/disk/agebulk5/medicare.work/lbaker-DUA23466/lbaker/data/xw";
ods listing file = "/disk/agebulk5/medicare.work/lbaker-DUA23466/ausmita/
temp/carrier_12222015.lst";
proc printto
log="/disk/agebulk5/medicare.work/lbaker-DUA23466/ausmita/temp/carrier_
12222015.log";
run;
*--------------... 阅读全帖 |
|
s****d 发帖数: 244 | 25 各位大神,我用下面的代码合并两个数据库,但是合并后的数据库中prices都为
missing value。请教是怎么回事啊?谢谢!
data bm;
set bm;
rename standard_and_poor_s_identifier=gvkey
historical_CRSP_permno_link_to_C=permno
data_date=date
company_name=cname
common_shares_used_to_calculate=cshr
var7=eps
Market_Value___Total=market;
format date ddmmyy10.;
cyear=year(date);
quarter=qtr(date);
run;
data mylib.prices;
set mylib.prices;
format date date9.;
cyear=year(date);
quarter=qtr(date);
run;
proc sql;
cr... 阅读全帖 |
|
U***3 发帖数: 2082 | 26 485 10月2号收到,12月14日收到RFE,要求重寄结婚证和出生证明公证及翻译。1月17
日之后寄出RFE,1月23日后得到decision通知。全家同时绿。NSC真不容易。
从7 月16日寄出140, 到7月21日拿到RFE通知,然后RFE140 寄出在9月14日,得到
approve date9月17日。10月2日寄出485,到今天终于拿到approve 通知。半年了,也
真不容易啊。 |
|
k****6 发帖数: 587 | 27 恭喜恭喜
漫长的等待,终于绿了,没有想象的狂喜,只是无奈的一笑附上timeline8/27/2013,
received date9/16/2013 , received Fingerp........ |
|
c*****s 发帖数: 180 | 28 SAS OnlineTutor®: Advanced SAS®
Combining Data Vertically 6 of 28
backnextlesson menuLearning Pathhelp menu
Using an INFILE Statement (continued)
Assigning the Names of the Files to Be Read
The next step is to assign the names of the three files to be read to the
variable nextfile:
data work.quarter;
infile temp filevar=nextfile;
input Flight $ Origin $ Dest $
Date : date9. RevCargo : comma15.2;
In this case, let's use th |
|
i*******t 发帖数: 145 | 29 西部凌晨12点差5分钟,verizon开始偷跑,顺利订到6+ 64 gold,delivery date9/19
★ 发自iPhone App: ChineseWeb 8.7 |
|
p***h 发帖数: 1462 | 30 Please simplify the following program by macro statement. Thanks.
%let gennum12=378;
%let gendte12="06jul2001"d;
*******
*******;
data _null_;
x=mdy(month(&gendte12-28),01,year(&gendte12-28));
y=x+
mod(((6-weekday(x))>=0)*(6-weekday(x))+((6-weekday(x))<0)*(7+6-weekday(x)),7);
call symput('gennum11',put(&gennum12-(&gendte12-y)/7,z3.));
call symput('gendte11','"'!!put(y,date9.)!!'"d');
run;
da |
|
n*****s 发帖数: 10232 | 31 %let date=31oct2007;
%put &date;
data _null_;
do i=0 to 6;
call symput('mon_'||left(put(i,8.)),put(intnx('month',"&date"d,i,'end'),
date9.));
end;
run;
%put &mon_0 &mon_6;
%macro mm;
%do i=0 %to 6;
data _null_;
call symput("mm_&i",substr(put("&&mon_&i"d,ddmmyy6.),3,4));
run;
%end;
%mend mm;
%mm;
%put &mm_0 &mm_6;
后面那个macro总解不出来... 部分log:
MLOGIC(MM): %DO loop index variable I is now 6; loop will iterate again.
MPRINT(MM): data _null_;
SYMBOLGEN: Macro variable I resol |
|
t*****n 发帖数: 167 | 32 1.A raw data file is listed below.
1---+----10---+----20---+---
son Frank 01/31/89
daughter June 12-25-87
brother Samuel 01/17/51
The following program is submitted using this file as input:
data work.family;
infile 'file-specification';
run;
Which INPUT statement correctly reads the values for the variable Birthdate
as SAS
date values?
a. input relation $ first_name $ birthdate date9.;
b. input relation $ first_name $ birthdate mmddyy8.;
c. input relation $ first_n |
|
c******j 发帖数: 270 | 33 写了这么一段code
LIBNAME Mylib 'C:\Documents and Settings\cloverzj\My Documents\SAS';
proc format lib=mylib;
value $itemfmt
'C'='Cassette'
'R'='Radio'
'T'='Television';
run;
data sasuser.orders;
infile aug99dat;
input ID 3. @5 Date date7.
Item $13 Quantity 15-17
Price 19-24 TotalCost 26-32;
format date date9. totalcost dollar9.2;
format Item $itemfmt.;
run;
proc print data=sasuser.orders;
run;
可是运行的时候总是说The format $ITEMFMT was not found or cou |
|
H***y 发帖数: 340 | 34 为什么不能用first.和last.呢?
log
NOTE: 变量 first.ticker 未初始化。
NOTE: 变量 last.ticker 未初始化。
NOTE: 从数据集 STARTUP.REGTEST 读取了 26 个观测。
NOTE: 数据集 STARTUP.REGBEGIN 有 0 个观测和 6 个变量。
NOTE: 数据集 STARTUP.REGEND 有 0 个观测和 6 个变量。
code
data startup.regbegin startup.regend;
set startup.regtest;
if first.ticker
then do;
begindate=date;
format begindate date9.;
output startup.regbegin;
end;
if last.ticker
then do;
|
|
p********a 发帖数: 5352 | 35 YAHOO的股市DATA?你把DATE FORMAT改成DATE9.就可以了
看看俺的MACRO
%macro getdata(tic);
FILENAME myurl URL "http://ichart.finance.yahoo.com/table.csv?s=&tic";
DATA &tic;
INFILE myurl FIRSTOBS=2 missover dsd;
format date yymmdd10.;
INPUT Date: yymmdd10. Open High Low Close Volume Adj_Close ;
if date>=today()-180;
RUN; |
|
p********a 发帖数: 5352 | 36 if length>8 then colon is necessary. Date9. reads 9 characters. |
|
G**S 发帖数: 1108 | 37 z=(x-1960)*365.25;
format z date9.; |
|
c****g 发帖数: 156 | 38 DATA _NULL_;
call symput ('today', compbl(put(today(), date9.)));
run;
proc export data = files
outfile = "c:\filename&today." dbms = xls replace ;
run; |
|
h******e 发帖数: 1791 | 39 thanks, another question: what is the role of "< >" in the following code:
....................
%let a = < %str(%sysfunc(date(),date9.) : %sysfunc(time(),time5.)) >;
.................... |
|
|
p*****d 发帖数: 44 | 41 我新手一个。。。
试试, date9., 能读出来 |
|
j**********e 发帖数: 442 | 42 不好意思,不行啊。
原始数据的一部分:
date
4-Dec-08
18-Dec-04
13-Sep-07
15-Sep-07
8-May-07
程序:
data date;
infile 'C:\research\date.csv' firstobs=2 dsd missover;
input date date9.;
format date yymmdd10.;
run;
读出来的:
.
2004-12-18
2007-09-13
2007-09-15
.
就是说第一和第五个observation读不出来。
还有,如何输出20041218类型的日期变量?
多谢指教! |
|
p*****d 发帖数: 44 | 43 在准备SAS BASE,有一道关于INPUT的问题不是很清楚
data work.month;
date=input('13mar2000', date9.);
run;
答案说DATE这个variable的长度为8,这是为什么呢?
谢谢!! |
|
h**h 发帖数: 488 | 44 It works. Thanks.
date9. format can now be used to calculate the age. Interesting to see input
function can transform the date1 to the SAS time variables. I wonder I can
use it for other purpose.
use |
|
a*****3 发帖数: 601 | 45 data test2 ;
input @1 q1 date9. ;
format q1 yymmdd10. ;
datalines;
12NOV1993
;
run;
还有个问题,没看完你就删了? |
|
|
y*****t 发帖数: 1367 | 47 如果那个数字的变量是numeric的,那在data step里加一行
format xyz date9.;
就行了~ |
|
s******y 发帖数: 352 | 48 why you need an extra step for creating a M var.
%let Date =%qsysfunc(inputN(01JAN2006,date9), yymmddn8);
%put >&date<;
%let Date =%qsysfunc(putN('01JAN2006'd, yymmddn8));
%put >&date<;
BAOZI please!
out |
|
s******y 发帖数: 352 | 49 data have;
input ID :$8. Visit Date :date9.
Unconfirmed_response :$8.;
cards;
1001 1 12JAN2009 SD
1001 2 13MAR2009 uPR
1001 3 28MAR2009 uPR
1001 4 02MAY2009 uPR
1001 5 31MAY2009 SD
1001 6 02AUG2009 uPR
1001 7 18AUG2009 uPR
1001 8 12SEP2009 SD
;
run;
data have;
set have;
by ID Unconfirmed_response notsorted;
gp+1*first.Unconfirmed_response-gp*first.ID;
run;
proc sql;
create table want as
select *,... 阅读全帖 |
|
S********a 发帖数: 359 | 50 有100个数据,有个变量名叫:date, 数据是06/17/2008这种形式的
我想把数据分成三个dataset,07/20/2008前,07/20/2008~09/17/2008, 09/17/2008
以后
data b c d;
set a;
format date DATE9.;
date1 = '20JULY2008'd;
date2 = '17SEPT2008'd;
if date < date1 then output b;
if data > date2 then output d;
else output c;
run;
出了error msg : Invalid date/time/datetime constant '20JULY2008'd.
Invalid date/time/datetime constant '17SEPT2008'd.
麻烦帮我看看,我自己觉得没错啊,但是就是不行。
包子答谢! |
|