日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAS MACRO

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAS MACRO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • **LESSON 1**
  • 1.1: SAS macro是什么
  • 1.2: Macro Basic info
    • 1. macro trigger
    • 2. 創建macro variable的三種方法
      • 1) %LET Statement
      • 2) CALL SYMPUTX routine in the DATA step
      • 3) INTO clause in the SQL procedure
    • 3. Macro Variable 存儲位置等
      • 1)local and global tables
      • 2)%PUT Statement
  • 1.3: 兩個Macro工具
    • 1. Macro Variables
    • 2. Macro Programs
      • 1)define macro program
      • 2)call/invoke macro program
      • 3)Macro Program Parameters
      • 4)SAS system options
  • 1.4: Two valid set of statement in macro program
    • 1)iterative statement %DO and %END
    • 2)conditional processing %IF-THEN-DO
  • 1.5: not straightforward basics
    • 1) Macro Variable Reference with Period Delimiter
    • 2) Multiple Ampersands for Indirect Reference
    • 3) Compilation of Macro Quoting Functions
    • 4) Execution Macro Quoting Functions
    • 5) Macro IN Operator
  • **LESSON 2**
  • 2.1: SAS I/O Functions
  • **LESSON 3**
  • 3: Getting the most out of SAS macro and SQL
      • 十個example
        • 1) Scenario 1
        • 2) Scenario 2
        • 3) Scenario 3
        • 4) Scenario 4
        • 5) Scenario 5
        • 6) Scenario 6
        • 7) Scenario 7
        • 8) Scenario 8
        • 9) Scenario 9
        • 10) Scenario 10
  • **LESSON 4**
  • 4: SQL 基本語句
    • 4.1 查詢
      • 4.1.1 單表查詢
    • 4.2 連接查詢
      • 4.2.1 外連接查詢
      • 4.2.2 復合條件連接查詢
      • 4.2.3 自身連接查詢
      • 4.2.4 嵌套查詢
      • 4.2.5 內連接inner join
  • **LESSON 5**
  • 5: SAS常用函數
    • Numeric functions
  • **LESSON 6**
  • 6: PROC SQL Programming Techniques for SAS Users and Programmers(接著上面sql的例子)
    • Chapter 1
      • 1.1 Inner Join Construct
  • **LESSON 7—SQL 題目練習**
  • SAS BY TECHIEVENTURES
    • 1. SAS PROC PRINT
      • Part 1:
      • Part 2:
      • Part 3:ID STATEMENT & BY STATEMENT
    • 2. SAS DATE FUNCTION
      • Part 1: Date, Time, Today, Datetime
      • Part 2: DATEPART, TIMEPART
      • Part 3: Date, Week, Month, QTR, Year
      • Part 4: WEEKDAY, INTCK,INTNX,YRDIF
    • 3. SAS CHARACTER FUNCTION
      • Part 1: UPCASE, LOWCASE, PROPCASE


提示:以下是本篇文章正文內容,下面案例可供參考

LESSON 1

參考教程
https://www.youtube.com/watch?v=P1LZ2_sjvtc&t=1369s

1.1: SAS macro是什么

SAS macro — 宏,是SAS的一種強大的編程特性。利用SAS macro,我們可以有效避免代碼的重復冗雜,macro可以反復使用,抓取動態變化的值等等。

1.2: Macro Basic info

1. macro trigger

SAS macro有兩個macro trigger,一個是&,另一個是%。

  • Ampersand - &:macro variable trigger
  • percent sign - %:macro program trigger

Note:如果Macro trigger表示的是string,需要加雙引號。

where month="&month" and year=&year;

2. 創建macro variable的三種方法

1) %LET Statement

基本用法:

%LET macro-variable = value;

例子:

%LET YearCurr = 2020; %let YearCurr = %sysfunc(year(%sysfunc(today()))); %let YearPrev = %eval(&YearCurr - 1);

2) CALL SYMPUTX routine in the DATA step

CALL SYMPUTX(macro-variable, value); data _null_;YC = year(today());YP = YC - 1;call symputx('YC', YC); #name is the first, value is the secondcall symputx('YP', YP); run; %put &YC &YP;

3) INTO clause in the SQL procedure

SELECT value INTO :macro-variable; data work.prdsale;set sashelp.prdsale;year=year+25; run; * One macro variable; * 讓YearMax表示用sql選取出來的最大的年份; proc sql;select put(max(year),4.)into :YearMaxfrom work.prdsale; quit;

3. Macro Variable 存儲位置等

1)local and global tables

  • local symbol tables
  • global symbol tables

2)%PUT Statement

/* %PUT statement */ %put _all_; %put _user;%put Today is &YearCurr; /* display macro variable in log.

1.3: 兩個Macro工具

1. Macro Variables

Macro variable包括了SAS program中可以重復使用的值,可以小范圍的用于text substitution。

2. Macro Programs

1)define macro program

%MACRO 和 %MEND Statement

%macro mydttime;%let mydt=%sysfunc(date(),worddate.);%let mytime=%sysfunc(time(),timeampm.);%put The current date is &mydt..;%put The current time is &mytime..;%mend mydttime;

2)call/invoke macro program

%mydttime /* 這里不需要分號

Result:

%mydttime The current date is April 13, 2022. The current time is 9:37:48 AM.

3)Macro Program Parameters

  • position parameters
  • keyword paramaters
/* Position parameters -- such as function in R and Python*/ %macro cars(mke, cyl); proc print data=sashelp.cars;where make="&mke" and cylinders=&cyl;title "&mke &cyl Cylinders"; run; %mend cars;%cars(Ford, 8)/* keyword parameters */ %macro cars(mke=Audi, cyl=6); proc print data=sashelp.cars;where make="&mke" and cylinders=&cyl;title "&mke &cyl Cylinders"; run; %mend cars;%cars(cyl=4) /* overriding the default value of cylinders, mke is still equal to Audi.

4)SAS system options

  • MLOGIC
  • MPRINT
  • SYMBOLGEN
options mlogic mprint symbolgen; %carmake(Chevrolet)

1.4: Two valid set of statement in macro program

1)iterative statement %DO and %END

%macro allcars; %do i=1 %to 38;proc print data=sashelp.cars noobs;where make="%scan(&makes, &i, ~)";title "Make %scan(&makes, &i, ~)";run; %end; %mend allcars;%allcars

2)conditional processing %IF-THEN-DO

%macro carmake(mke); %if &mke=Chevrolet or &mke=Toyota %then %do;proc freq data=sashelp.cars;where make="&mke";tables cylinders;title "Make &mke";run; %end; %else %do;proc print data=sashelp.cars;where make="&mke";title "Make &mke";run; %end; %mend carmake;%carmake(Acura) %carmake(Toyota) options mprint; %carmake(Aura);

1.5: not straightforward basics

1) Macro Variable Reference with Period Delimiter

%let month=MAR; %let year=2020;%put &month&year; *MAR2020;%put &month&yeardata; *WARNING: Apparent symbolic reference YEARDATA not resolved.;%put &month&year.data; *MAR2020data;%put It is &month of &year.; %put It is &month of &year..;%let lib=sashelp; %let dsn=class;proc print data=&lib.&dsn; *ERROR: File WORK.SASHELPCLASS.DATA does not exist.; run; proc print data=&lib..&dsn; *語法正確沒有報錯,注意和上面的區別; run;

2) Multiple Ampersands for Indirect Reference

%let year=2020; %let var=location; %let city2020=Washington; %let location2020=District of Columbia;%put &city&year; *WARNING: Apparent symbolic reference CITY not resolved.; %put &&city&year; *Washington; %put &&&var&year; *District of Columbia;

3) Compilation of Macro Quoting Functions

%let step=data new%str(;) x=1%str(;); &step; run;*got the same answer; %let step=%str(data new;x=1;); &step run;%let title=Employee%str(%')s Report; %put &title;*%str cannot mask or cover up the meaning of macro trigger(&), but %nrstr can; %let company=R%nrstr(&)D as of &sysdate9; %put &company;

4) Execution Macro Quoting Functions

/*Mask Mnemonic Operator company是前面創建的macro variable,這里調用了;*/ %put &company;/*Incorrect*/ *ne: not equal; %macro check(company); %if ABC ne &company %then %do;%put Not a match; %end; %else %put Match; %mend check; %check(OR Insurance);/*correct*/ %macro check(company); %if ABC ne %superq(company) %then %do;%put ERROR- Not a match; %end; %else %put ERROR- Match; %mend check; %check(OR Insurance); %check(ABC);/*Mask ampersand*//*Incorrect*/ data _null_;call symputx('company', 'Smith&Johns'); run; %let newcmpy=&company; %put The new company is &newcmpy;/*correct*/ data _null_;call symputx('company', 'Smith&Johns'); run; %let newcmpy=%superq(company); %put The new company is &newcmpy;

5) Macro IN Operator

/*Default Delimiter*/ %macro carsubset(type) / minoperator; %if &type in SUV Truck Wagon %then %do;proc print data=sashelp.cars;where Type="&type";title "Report for &type";run; %end; %if &type in (Sedan Sports) %then %do;proc freq data=sashelp.cars;where Type="&type";table Make;title "Report for &type";run; %end; %mend carsubset;%carsubset(SUV); %carsubset(Truck); %carsubset(Sedan); %carsubset(Sports);*Specified delimiter; %macro carsubset(type) / minoperatormindelimiter=','; %if &type in SUV, Truck, Wagon %then %do;proc print data=sashelp.cars;where Type="&type";tables Make;run; %end; %mend carsubset;%carsubset(SUV); %carsubset(Truck); %carsubset(Wagon); %carsubset(Sedan); %carsubset(Sports);

LESSON 2

2.1: SAS I/O Functions

SAS中的I/O function可以用于檢索 metadata information

  • exist
proc contents data=sashelp.class; /*顯示出sashelp.class的info*/ %macro data1(dsn); %if %sysfunc(exist(&dsn))=1 %then %do;proc print data=&dsn(obs=10);run; %end; %else %put Not a Valid data set.; %mend data1; %data1(sashelp.class)
  • OPEN/ATTERN/CLOSE Functions
    ATTRN Function returns the value of a numeric attribute for a SAS data set.
%macro data2(dsn); %let dsid=%sysfunc(open(&dsn)); %if &dsid ne 0 %then %do;%let numobs=%sysfunc(attrn(&dsid, nlobs));%let numvars=%sysfunc(attrn(&dsid, nvars));%let rc=%sysfunc(close(&dsid));proc print data=&dsn(obs=10);title1 "Data set &dsn with &numobs Observations and &numvars Variables";title2 "Ten observations in Report";run; %end; %else %put Not a Valid data set.; %mend data2; %macro data3(dsn); %if %sysfunc(exist(&dsn))=1 %then %do;%let dsid=%sysfunc(open(&dsn));%let numvar=%sysfunc(attrn(&dsid, nvars));%let char=0;%do i=1 %to &numvar;%if %sysfunc(vartype(&dsid, &i))=C %then %do;%let char=%eval(&char+1);%end;%end;%let rc=%sysfunc(close(&dsid));proc print data=&dsn(obs=10);title1 "Data set &dsn with &char Character Variables";title2 "Ten observations in Report";var _character_; /*如果只想顯示character形式的變量*/run; %end; %else %put Not a Valid data set.; %mend data3;%data3(sashelp.class)
  • External File Functions
%macro runpgms(path); filename mydir "&path"; %let dirid=%sysfunc(dopen(mydir)); %let dirnum=%sysfunc(dnum(&dirid));%do i=1 %to &dirnum;%include "&path\%sysfunc(dread(&dirid, &i))" / source2; %end;%let rc=%sysfunc(dclose(&dirid)); filename mydir clear; %mend runpgms;

LESSON 3

3: Getting the most out of SAS macro and SQL

https://www.youtube.com/watch?v=sM3sidYPT-o`

十個example

1) Scenario 1

/* Scenario 1 */ proc sql;title1 "Chevrolet";select model, type, msrp from sashelp.cars where make="Chevrolet" order by model; quit;

2) Scenario 2

/* Scenario 2 */ options mcompilenote=noautocall;%macro carfinder(car);*position parameter;proc sql;title1 "&car";select model, type, msrp from sashelp.cars where make="&car" order by model;*order by 1也可以;quit;%mend carfinder;%carfinder(Chevrolet) %carfinder(BMW) %carfinder(Bmw); *case sensitive;

3) Scenario 3

/* Scenario 3 */ %macro carfinder(car);proc sql noprint;select mean(msrp) format=dollar7. into: mean_msrp from sashelp.cars where make="&car";reset print;title1 "&car";title2 "Average MSRP: &mean_msrp";select model, type, msrp from sashelp.cars where make="&car" order by model;quit;%mend carfinder;%carfinder(Chevrolet);

4) Scenario 4

/* Scenario 4 */ proc sql noprint; select distinct type into :list separated by " " from sashelp.cars; quit; %put ERROR- &list; *標紅,- or : 都可以;

5) Scenario 5

/* Scenario 5 */ %macro charlist(var=,dsn=); *make them null values;%global list; *make macro variable into global variable;proc sql noprint; select distinct &var into :list separated by " " from &dsn; quit; %mend charlist;%charlist(var=make, dsn=sashelp.cars) %put ERROR- &list; %charlist(var=species, dsn=sashelp.fish) %put &list; %charlist(var=age, dsn=sashelp.class) %put WARNING- &list;

6) Scenario 6

/* Scenario 6 */ %macro carfinder(car);proc sql noprint;select mean(msrp) format=dollar7. into: mean_msrp from sashelp.cars where make="&car";reset print; *b/c we're doing two "select" in one macro program;title1 "&car";title2 "Average MSRP: &mean_msrp";footnote "Vehical types: &list";select model, type, msrp from sashelp.cars where make="&car" order by model;quit;%mend carfinder;%charlist(var=type, dsn=sashelp.cars) %put WARNING- &list..; %carfinder(Chevrolet);

7) Scenario 7

/* Scenario 7 */ *minoperator: in order to use macro IN operator in an expression; %macro carcheck(car) / minoperator;%charlist(var=make, dsn=sashelp.cars)%if &car in &list %then %do;%charlist(var=type, dsn=sashelp.cars)%carfinder(&car)%end;%else %do;%put ERROR: No &car.s.;%put NOTE: Cars include &list..;%end;%mend carcheck;%carcheck(Chevrolet) %carcheck(Chevy);

8) Scenario 8

/* Scenario 8 */ *try to clean up some macro variables; %macro deleteALL;*WINDOWING Environment; options nonotes; %local vars; proc sql noprint; select name into: vars separated by ' ' from dictionary.macros where scope='GLOBAL' and name not like 'SYS%' and name not like 'SQL%'; quit; %symdel %vars; options notes; %put NOTE: &sqlobs macro variable(s) deleted; %mend deleteALL;%deleteall %Put _user_;options nolabel; proc sql;select * from dictionary.tableswhere libname='SASHELP'; quit;options nolabel; proc sql;select * from dictionary.macros; quit;

9) Scenario 9

因為有一些macro variable我們明確知道我們是刪不掉的,所以用"name not like"直接去掉。

%macro deleteALL; options nonotes; %local vars; proc sql noprint; select name into: vars separated by ' ' from dictionary.macros where scope='GLOBAL' and name not like 'SYS%' and name not like 'SQL%'and name not like 'STUDIO%'and name not like 'CLIENT%'and name not like 'GRAPH%'and name not like 'OLD%'and name not like 'SAS%'and name not like 'USER%'and name not like '/_%' escape '/'; quit; %symdel &vars; options notes; %put NOTE: &sqlobs macro variable(s) deleted.; %mend deleteALL; %deleteall;

10) Scenario 10

如果scenario 9運行兩遍的話我們會發現已經沒有macro variable可以被刪除,所以我們加上%global x y z city state season之后,運行結果會變成有6個macro variable被刪除。

%macro deleteALL; options nonotes; %local vars; proc sql noprint; select name into: vars separated by ' ' from dictionary.macros where scope='GLOBAL' and name not like 'SYS%' and name not like 'SQL%'and name not like 'STUDIO%'and name not like 'CLIENT%'and name not like 'GRAPH%'and name not like 'OLD%'and name not like 'SAS%'and name not like 'USER%'and name not like '/_%' escape '/'; quit; %symdel &vars; options notes; %put NOTE: &sqlobs macro variable(s) deleted.; %mend deleteALL; %global x y z city state season; %deleteall;

LESSON 4

SQL相關學習來自:數據庫原理及應用(第2版)—雷景生等編著

4: SQL 基本語句

4.1 查詢

一般格式:

SELECT [ALL|DISTINCT]<目標列表達式>[,<目標列表達式>] FROM <表名或視圖名>[,<表名或視圖名>] [WHERE<條件表達式>] [GROUP BY <列名 1>[HAVING <條件表達式>]] [ORDER BY <列名 1>[ASC|DESC]];

4.1.1 單表查詢

  • 對查詢結果進行分組
    一般形式:
GROUP BY <分組依據列>[,...n] [HAVING<組提取條件>];

HAVING子句用于對分組后的結果進行過濾,功能類似WHERE,但用于組而不是單個記錄。在HAVING子句中可以使用聚集函數,但是在WHERE子句中則不能,HAVING通常和GROUP BY子句一起使用

聚集函數(Aggregate Functions):
COUNT/SUM/AVG/MAX/MIN etc

SELECT prj_num 項目號 FROM Out_stock GROUP BY prj_num HAVING COUNT( * ) >=2;

4.2 連接查詢

4.2.1 外連接查詢

  • 左外連接 LEFT OUTER JOIN:輸出結果我是列出左邊關系中所有的元祖,而不僅僅是列出連接屬性所匹配的元祖
  • 右外連接 RIGHT OUTER JOIN:結果是列出右邊關系中所有的元祖
  • 全外連接 FULL OUTER JOIN:結果是列出左邊關系和右邊關系中的所有元祖

4.2.2 復合條件連接查詢

WHERE 語句可以有多個連接條件

SELECT Out_stock, mat_num, speci, Out_stock, amount FROM Stock, Out_stock WHERE Stock, mat_num=Out_stock, mat_num ANDprj_num='20100015'

4.2.3 自身連接查詢

連接操作可以在兩個表之間進行,但同一個表也可以與自己進行連接

查詢同時使用了物資編號為m001和m002的搶修工程的工程號

SELECT A.prj_num FROM Out_stock A, Out_stock B /這里是給Out_stock 取了兩個別名分別為A和B/ WHERE A.prj_num = B.prj_num AND A.mat_num = 'm001' AND B.mat_num = 'm002';

因為Out_stock表中每一行只記錄了某搶修工程用得一種物資,所以我們需要通過自連接得到這一搶修工程使用的兩種物資信息

4.2.4 嵌套查詢

在SQL語句中,一個SELECT-FROM-WHERE語句稱為一個查詢塊,將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢

SELECT prj_name /*父查詢*/ FROM Salvaging WHERE prj_num IN(SELECT prj_num /*子查詢*/FROM Out_stockWHERE mat_num = 'm003');

以下整理自https://blog.csdn.net/qiushisoftware/article/details/80874463

https://blog.csdn.net/qq_33973359/article/details/105414617?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.1&utm_relevant_index=3

  • 不相關子查詢
    內部查詢的執行獨立于外部查詢,內部查詢僅執行一次,執行完畢后將結果作為外部查詢的條件使用。由子查詢向父查詢執行。
  • 相關子查詢
    內部查詢的執行依賴于外部查詢,外部查詢每執行一次,內部查詢也會執行一次。外部查詢先執行,取出外部查詢的一個元祖傳遞給內部查詢。
    父→子→父

4.2.5 內連接inner join

內連接(等值連接),返回兩張表都滿足條件的部分。

圖源:
https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

LESSON 5

5: SAS常用函數

Numeric functions

https://www.youtube.com/watch?v=Xpk7RnwARxw

這些functions都是作用于行,而不是列
簡單例子:

DATA FUN1; A = 10; B = 20; C = 30; MIN_1 = MIN(A, B, C, -10, 100); MAX_1 = MAX(A, B, B, -10, 100); RUN;PROC PRINT DATA=FUN1; RUN;

the missing values will be eliminated. Mathemetical formula cannot handle missing values in this case.

DATA TEST1; SUB_1 = 45; SUB_2 = 20; SUB_3 = 30; SUB_4 = 25; SUB_5 = 40; SUB_6 = 80; SUM_1 = SUM(OF SUB_1 - SUB_3); RUN;PROC PRINT DATA = TEST1; RUN;
  • first and last functions
    https://www.youtube.com/watch?v=71oRJrb5aF8
    截圖源自:SAS Help Center
data emp; input id age; cards; 1 50 1 51 2 45 2 67 3 78 3 45 4 56 4 58 4 77 5 78 ; run;proc sort data=emp;by id; run;data emp_temp; set emp; by id; t_f = first.id; t_l = last.id; run;data emp_temp; set emp; by id; t_f = first.id; t_l = last.id; if t_f = 1; /*get the unique observations*/ run; data emp_temp; set emp; by id; t_f = first.id; t_l = last.id; if t_f=1 then cnt=1; else cnt+1; run;
  • proc means
    https://www.youtube.com/watch?v=0KkCahcBKtY

https://www.listendata.com/2015/01/sas-detailed-explanation-of-proc-means.html#:~:text=PROC%20MEANS%20is%20one%20of,variance%20and%20sample%20t%2Dtest.

PROC MEANS is one of the most common SAS procedure used for analyzing data. It is mainly used to calculate descriptive statistics such as mean, median, count, sum etc. It can also be used to calculate several other metrics such as percentiles, quartiles, standard deviation, variance and sample t-test.
可以做描述性統計分析

proc means data=SASHELP.CLASS; run;
  • proc freq
    會給表格中的每一個變量建立頻率表
proc freq data=SASHELP.CLASS; run;

LESSON 6

6: PROC SQL Programming Techniques for SAS Users and Programmers(接著上面sql的例子)

https://www.youtube.com/watch?v=TncJXz_iHeE

Chapter 1

1.1 Inner Join Construct

LESSON 7—SQL 題目練習

https://www.bilibili.com/medialist/play/ml1058913098/BV1q4411G7Lw?oid=55971363&otype=2
https://zhuanlan.zhihu.com/p/38354000
https://zhuanlan.zhihu.com/p/43289968

  • 查詢課程編號為“01”的課程比“02”的課程成績高的所有學生的學號(重點)
-- 查詢課程編號為“01”的課程比“02”的課程成績高的所有學生的學號(重點) select a.s_id from (select s_id, c_id, s_score from Score where c_id = '01') as a inner join (select s_id, c_id, s_score from Score where c_id = '02') as b on a.s_id=b.s_id where a.s_score > b.s_score

思路:首先我們想要有一個表格,這個表格中有s_id+該學生01課程的成績+該學生02課程的成績,這樣我們就能通過簡單的邏輯解決這個問題。用inner join自關聯之后便可以得到類似的一張表格。
inner join選出的是兩個表格重復的部分

我們也可以帶著成績+學生姓名一起看

select a.s_id "s_no", a.s_score "01", b.s_score "02" from (select s_id, c_id, s_score from Score where c_id = '01') as a inner join (select s_id, c_id, s_score from Score where c_id = '02') as b on a.s_id=b.s_id inner join Student as c on c.s_id=a.s_id where a.s_score > b.s_score
  • 查詢沒學過“張三”老師課的學生的學號、姓名(重點)
    方法一:進行多層嵌套
    思路:先找出學過張三老師課的學生,然后取反
select * from Course where t_id = (select t_id from Teacher where t_name = "張三");

我們先查詢到張三老師教數學,課程編號為02
然后可以查詢學過02這門課程的學生有哪些:

select s_id from Score where c_id = (select c_id from Course where t_id = (select t_id from Teacher where t_name = "張三"));

然后再取反得到沒學過:用not in

select s_id, s_name from student where s_id not in ( select s_id from Score where c_id = (select c_id from Course where t_id = (select t_id from Teacher where t_name = "張三") ));

第二種解法:先連表 再取not in

select s_id, s_name from Student where s_id not in ( select s_id from Score as s inner join Course as c on s.c_id = c.c_id inner join Teacher as t on c.t_id = t.t_id where t.t_name="張三") ;
  • 查詢學過編號為“01”的課程并且也學過編號為“02”的課程的學生的學號、姓名(重點)
select s_id, s_name from Student where s_id in ( select a.s_id from (select s_id from Score where c_id = "01") as a inner join (select s_id from Score where c_id = "02") as b on a.s_id = b.s_id );
  • 查詢至少有一門課與學號為“01”的學生所學課程相同的學生的學號和姓名(重點)
    寫法1:
select s_id, s_name from Student where s_id in ( select distinct s_id from Score where c_id in ( select c_id from Score where s_id = "01") and s_id != "01");

寫法2:

select a.s_id, a.s_name from Student as a inner join ( select distinct s_id from Score where c_id in ( select c_id from Score where s_id = "01") and s_id != "01") as b on a.s_id = b.s_id;

寫法3:

select distinct st.s_id, st.s_name from Student as st inner join Score as sc on st.s_id = sc.s_id where sc.c_id in( select c_id from Score where s_id = "01" ) and st.s_id != "01";
  • 查詢和“01”號同學所學課程完全相同的其他同學的學號(重點)
    01號同學學了01, 02, 03三門課
    -選出所學的課不在(01, 02, 03)的同學排除掉
    -剩下的同學肯定選了(01, 02, 03)中的某幾門課
    -再判斷所學的課程數是否等于3
select * from Student where s_id in ( select s_id from Score where s_id != "01" group by s_id having count(distinct c_id) = (select count(distinct c_id) from Score where s_id = "01")) and s_id not in (-- 選了和01同學不一樣的課的同學 select distinct s_id from Score where c_id not in ( select c_id from Score where s_id = "01"))
  • 查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績(重點)
select a.s_id, a.s_name, AVG(s_score) from Student as a inner join Score as b on a.s_id = b.s_id where a.s_id in ( select s_id from Score where s_score < 60 group by s_id having count(distinct c_id) >= 2) group by s_id, s_name; select st.s_id, st.s_name, AVG(sc.s_score) from Student as st inner join Score as sc on st.s_id = sc.s_id where sc.s_score < 60 group by st.s_id, st.s_name having count(c_id) >= 2;
  • 按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
    (很重點)
select s_id "學號", MAX(case when c_id = "01" then s_score else null end) "01", MAX(case when c_id = "02" then s_score else null end) "02", MAX(case when c_id = "03" then s_score else null end) "03", MAX(case when c_id = "04" then s_score else null end) "04", avg(s_score) "平均成績" from score group by s_id order by avg(s_score) desc
  • 使用分段[100-85],[85-70],[70-60],[<60]來統計各科成績,分別統計各分數段人數:課程ID和課程名稱
select c.c_id, c.c_name, sum(case when sc.s_score <= 100 and sc.s_score > 85 then 1 else 0 end) as "[100, 85)", sum(case when sc.s_score <= 100 and sc.s_score > 85 then 1 else 0 end) as "[85, 70)", sum(case when sc.s_score <= 100 and sc.s_score > 85 then 1 else 0 end) as "[70, 60)", sum(case when sc.s_score <= 100 and sc.s_score > 85 then 1 else 0 end) as "[60, 0)" from Score as sc inner join Course as c on sc.c_id = c.c_id group by c.c_id, c.c_name

如果用COUNT()函數的話,else后面需要改成NULL

  • 查詢1990年出生的學生名單(重點year)

將出生年月中的年份選出來

select * from Student where year(s_birth) = 1990 select month("1990-12-21")

這里的年月日需要加引號,如果不加引號的結果是NULL
可以是“YYYY-MM-DD”, “YYYYMMDD”, “YYYY/MM/DD”, "YYMMDD"的形式

  • 查詢所有學生的課程及分數情況(重點):帶課程名稱和學生名稱
    這種表達方式思路簡單但是復雜
select a.*, b.s_name, c.c_name from Score as a left join (select s_id, s_name from Student) as b on a.s_id = b.s_id left join (select c_id, c_name from Course) as c on a.c_id = c.c_id

顯示出來的格式是這樣的,但是更簡潔的是:s_id, s_name, 語文成績,數學成績,英語成績,化學成績(思路類似上幾道題的max形式)

select a.s_id "學號", b.s_name "姓名", MAX(case when a.c_id = "01" then a.s_score else null end) "語文", MAX(case when a.c_id = "02" then a.s_score else null end) "數學", MAX(case when a.c_id = "03" then a.s_score else null end) "英語", MAX(case when a.c_id = "04" then a.s_score else null end) "化學" from Score as a left join Student as b on a.s_id = b.s_id group by a.s_id
  • 查詢沒有學全所有課的學生的學號、姓名(重點)
    先展示一種比較典型的錯誤寫法:
select a.*, b.s_name from (select s_id, count(c_id) "選課數量" from Score group by s_id having count(distinct c_id) < (select count(distinct c_id) from Course)) as a left join (select s_id, s_name from Student) as b on a.s_id = b.s_id

這種寫法的問題在于漏掉了一門課都沒選的同學,由于這個同學沒有進行選課,所以他也沒有在Score這張表里的記錄

select st.s_id, st.s_name from Student as st left join Score as sc on st.s_id = sc.s_id group by st.s_id, st.s_name having count(distinct sc.c_id) < (select count(distinct c_id) from Course);

一定一定要注意這個ONLY FULL GROUP BY 的問題!!!!!!!
前面select了什么 后面group by就一定要放進去!!!!!

SAS BY TECHIEVENTURES

https://www.youtube.com/watch?v=XSwxaqrJibY&list=PL4zQKvfkH85gD0rTaAFUDVM9XVWCa8Vhp&index=5

1. SAS PROC PRINT

Part 1:

PROC PRINT DATA = SASHELP.CLASS; RUN;


如果不聲明的話會輸出最近創建的dataset

  • N
PROC PRINT DATA = SASHELP.CLASS N = "TOTAL_STUDENTS = "; RUN;

表格最后一行會顯示出observation的總數

  • NOOBS
PROC PRINT DATA = SASHELP.CLASS NOOBS; RUN;

表格中最左邊一行的Obs會被去掉

  • DOUBLE
PROC PRINT DATA = SASHELP.CLASS DOUBLE; RUN;

在UNIVERSITY EDITION中效果看不出來

  • LABELS
PROC PRINT DATA = SASHELP.CLASS LABEL; LABEL NAME = "NAME_STUDENT"HEIGHT = "HT_IN_CMS"WEIGHT = "WT_IN_LBS"; RUN;
  • FIRSTOBS / OBS
  • FIRSTOBS
  • PROC PRINT DATA = SASHELP.CLASS (FIRSTOBS=17) N NOOBS; RUN;

    結果:

    2) OBS

    PROC PRINT DATA = SASHELP.CLASS (OBS=5); RUN;

    顯示了數據集的前五條

    PROC PRINT DATA = SASHELP.CLASS (FIRSTOBS=5 OBS=10); RUN;

    顯示了數據的第6-10條

    Part 2:

    • VAR: 選擇變量 + 變量的順序

    1) 直接選擇變量

    PROC PRINT DATA = SASHELP.CLASS; VAR NAME AGE HEIGHT; RUN;

    2)根據類型選擇變量

    PROC PRINT DATA = SASHELP.CLASS; VAR _NUMERIC_; RUN; PROC PRINT DATA = SASHELP.CLASS; VAR _CHAR_; RUN; PROC PRINT DATA = SASHELP.CLASS; VAR _ALL_; RUN;

    Part 3:ID STATEMENT & BY STATEMENT

    • ID STATEMENT
      1)sex這一列會將前面本來的id給覆蓋掉
    PROC PRINT DATA = SASHELP.CLASS; ID SEX; RUN;

    結果:

    2)SEX會變成第一列,AGE會變成第二列

    PROC PRINT DATA = SASHELP.CLASS; ID SEX AGE; RUN;

    3)如果ID后面什么都不加的話,就僅僅是去掉obs那一列

    PROC PRINT DATA = SASHELP.CLASS; ID; RUN;

    4)數據集樣式的改變

    PROC PRINT DATA = SASHELP.CLASS; ID AGE / STYLE(DATA) = {BACKGROUND = BLUE FOREGROUND = WHITE}STYLE(HEADER) = {BACKGROUND = YELLOW FOREGROUND = BLACK}; RUN;

    結果:
    會讓表格看起來更fancy一點

    • BY STATEMENT

      Note: 在用BY STATEMENT之前,需要先SORT數據集
    PROC SORT DATA = SASHELP.CLASS OUT = CLASS1; BY SEX; RUN;PROC PRINT DATA = CLASS1; BY SEX; RUN;

    結果:
    SEX變量不在數據集中了

    在BY STATEMENT后面也可以用STYLE,it can be applied in a different way

    STYLE(DATA) = {BACKGROUND = BLUE FOREGROUND = WHITE}STYLE(HEADER) = {BACKGROUND = YELLOW FOREGROUND = BLACK}; RUN;

    結果:

    • PRACTICES
      1)Find the sum of Sales and Returns of the sashelp.shoes dataset for every region
    PROC SORT DATA = SASHELP.SHOES OUT = SHOES2; BY REGION; RUN;PROC PRINT DATA = SHOES2; BY REGION; SUM SALES RETURNS; RUN;

    2)Group the sashelp.class by sex and find the sum of all the numeric variables in the data set

    PROC SORT DATA = SASHELP.CLASS OUT = CLASS2; BY SEX; RUN;PROC PRINT DATA = CLASS2; BY SEX; SUM _NUMERIC_; RUN;

    2. SAS DATE FUNCTION

    Part 1: Date, Time, Today, Datetime

    SAS DATE FUNCTION
    需要注意的是這里的format問題,前面也有提到過;

    DATA FUN_EXAMPLES; D1 = DATE(); D2 = TODAY(); D3 = TIME(); D4 = DATETIME(); FORMAT D1 D2 DDMMYY10. D3 TIME8. D4 DATETIME10.; RUN;PROC PRINT DATA = FUN_EXAMPLES; RUN;

    結果:

    如果想要DATETIME()顯示的更全一點就改成DATETIME18.,結果如下:

    Part 2: DATEPART, TIMEPART

    • DATEPART: It extracts the date part of a SAS datetime value as a date value
    • TIMEPART: It extracts the time part of a SAS datetime value as a date value; Returns the time as hours, minutes and seconds.
    DATA DATA_1; A = DATETIME(); R1 = DATEPART(A); R2 = TIMEPART(A); FORMAT A DATETIME18.; FORMAT R1 DATE9.; FORMAT R2 TIME8.; RUN;PROC PRINT DATA = DATA_1; RUN;

    結果:

    • DATEJUL
    DATA JULIAN_1; P = 18365; Q = 2018365; R = 22215; R1 = DATEJUL(P); R2 = DATEJUL(Q); R3 = DATEJUL(R); FORMAT R1 R2 R3 DATE9.; RUN;PROC PRINT DATA = JULIAN_1; RUN;

    結果:

    Part 3: Date, Week, Month, QTR, Year

    DATA DATE_EXP_1; P = "14-DEC-15"D; R1 = DAY(P); R2 = MONTH(P); R3 = QTR(P); R4 = YEAR(P); FORMAT P DATE9.; RUN;PROC PRINT DATA = DATE_EXP_1; RUN;

    結果:

    • WEEK

      1)例子1:
    DATA DATE_EXP_2; P = "14-DEC-15"D; R1 = WEEK(P, "U"); R2 = WEEK(P, "V"); R3 = WEEK(P, "W"); FORMAT P DATE9.; RUN;PROC PRINT DATA = DATE_EXP_2; RUN;

    結果:

    2)例子2:

    DATA DATE_EXP_3; P = "30-DEC-15"D; R1 = WEEK(P, "U"); R2 = WEEK(P, "V"); R3 = WEEK(P, "W"); FORMAT P DATE9.; RUN;PROC PRINT DATA = DATE_EXP_3; RUN;

    結果:

    3)例子3:
    這里2016年是leap year,所以也會影響week的結果

    DATA DATE_EXP_3; P = "30-DEC-15"D; R1 = WEEK(P, "U"); R2 = WEEK(P, "V"); R3 = WEEK(P, "W"); FORMAT P DATE9.; RUN;PROC PRINT DATA = DATE_EXP_3; RUN;

    結果:

    Part 4: WEEKDAY, INTCK,INTNX,YRDIF

    • INTNX STATEMENT
      description: Increments a date, time, or datetime value by a given time interval, and returns a date, time, or datetime value. (From SAS HELP CENTER)
      語法:
      INTNX( interval <.shift-index>, start-from, increment <, ‘alignment’>)
      INTNX( custom-interval, start-from, increment <, ‘alignment’>)


    例子來源URL:
    https://www.listendata.com/2017/01/sas-intnx.html
    1)例子1:在給定的日期上加7天

    DATA TEMP; mydate = '02JAN2017'D; day=INTNX('day', mydate , 7); FORMAT mydate day date9.; RUN;PROC PRINT DATA = TEMP; RUN;


    2)例子2:下周日是幾號?

    DATA TEMP; mydate = '02JAN2017'd; nextsunday=INTNX('week', mydate , 1); FORMAT mydate nextsunday date9.; RUN;PROC PRINT DATA = TEMP; RUN;


    3)例子3:Suppose you need to find out the first day of a specific day

    DATA TEMP; SET sashelp.citiday; FIRSTDAY=INTNX('month', date , 0); FORMAT FIRSTDAY date9.; PROC PRINT DATA = TEMP; VAR date FIRSTDAY; RUN;


    3)例子4:上周二是幾號

    data temp; mydate = '10JAN2017'd; lasttuesday = intnx('week.4', mydate , -1, 'end'); format mydate lasttuesday date9.; proc print; run;

    4)例子5:區間內的調整

    data temp; mydate = '31JAN2017'd; beginning=intnx('year ', mydate , 1, 'b'); middle=intnx('year ', mydate , 1, 'm'); end=intnx('year ', mydate , 1, 'e'); sameday=intnx('year ', mydate , 1, 's'); format mydate beginning middle end sameday date9.; proc print; run;

    結果:

    5)例子6:DATETIME 格式

    data temp; mydt = '29JAN2017:08:34:00'dt; seconds=intnx('second', mydt , 1); minutes=intnx('minute', mydt , 1); hours=intnx('hour', mydt , 1); days=intnx('dtDay', mydt , 1); weeks=intnx('dtWeek', mydt , 1); format mydt seconds minutes hours days weeks datetime20.; proc print NOOBS; run;

    • INTCX STATEMENT
      https://www.listendata.com/2016/12/sas-intck-function-with-examples.html

      1)例子1:計算兩個日期之間的間隔
    data temp; date1 = '01JAN2015'd; date2 = '01JAN2017'd; no_of_years = intck ('YEAR', date1, date2); format date1 date2 date9.; proc print data = temp; run;


    2)計算兩個日期之間間隔的年份,季度等等

    data temp; date1 = '01JAN2015'd; date2 = '01JAN2017'd; no_of_years = intck ('YEAR', date1, date2); no_of_semiyears = intck ('SEMIYEAR', date1, date2); no_of_quarters = intck ('QUARTER', date1, date2); no_of_months = intck ('MONTH', date1, date2); no_of_weeks = intck ('WEEK', date1, date2); no_of_days = intck ('DAY', date1, date2); format date1 date2 date9.; proc print data = temp noobs; run;

    結果:

    3)calculate the number of 4 months interval between two dates

    data temp; date1 = '01JAN2015'd; date2 = '01JAN2017'd; no_of_4months = intck ('MONTH4', date1, date2); run;

    結果:

    4) 檢查日期出現的次數

    data temp; date1 = '31JAN2015'd; date2 = '31DEC2016'd; diff = intck ('YEAR', date1, date2); diff2 = intck ('YEAR.3', date1, date2); format date1 date2 date9.; proc print; run;

    3. SAS CHARACTER FUNCTION

    Part 1: UPCASE, LOWCASE, PROPCASE

    DATA CASE_1; A = "TEChieVENTures"; UP_CASE1 = UPCASE(A); LO_CASE1 = LOWCASE(A); PROP_CASE1 = PROPCASE(A); PC_CASE2 = UPCASE("test"); LO_CASE2 = LOWCASE("TECHIE"); RUN; PROC PRINT DATA = CASE_1; RUN

    總結

    以上是生活随笔為你收集整理的SAS MACRO的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    伊人一级 | 久久理论影院 | 久久影视精品 | 免费在线观看中文字幕 | 免费看成人 | 亚洲国产三级在线 | 五月激情丁香 | 亚洲欧洲成人 | 一区二区三区av在线 | 五月网婷婷 | 天天躁天天躁天天躁婷 | 国产v亚洲v | 国产亚洲欧美精品久久久久久 | 免费国产在线观看 | 国产自产高清不卡 | 成人免费网视频 | 国产韩国日本高清视频 | 日韩精品大片 | 中文字幕一区二区三区在线视频 | 天天射天天射 | 日韩videos | 蜜桃av久久久亚洲精品 | 超碰精品在线观看 | 亚洲六月丁香色婷婷综合久久 | 最新日韩精品 | 精品国模一区二区三区 | 激情视频一区二区 | 久久综合久久88 | 日韩中文字幕视频在线 | a成人v | 久久久久区 | 美女久久久久久 | 天堂av网址 | 国产尤物一区二区三区 | 久久免费福利 | 一区二区 精品 | 香蕉视频亚洲 | 国产色拍拍拍拍在线精品 | avwww在线观看 | 又黄又爽的视频在线观看网站 | 国产午夜精品一区二区三区在线观看 | 亚洲午夜精品久久久 | 亚州国产精品 | 四虎影视久久久 | 四虎成人精品永久免费av | 国产视频18 | 日韩在线视频网站 | 在线看一区二区 | 一区二区三区四区精品视频 | 亚洲精品久久久久中文字幕二区 | 国产高清在线观看av | 国产乱码精品一区二区蜜臀 | 中文字幕国产亚洲 | 天天爽天天射 | 天天摸天天干天天操天天射 | 夜色在线资源 | 在线观看国产一区 | 69久久久久久久 | 亚洲精品白浆高清久久久久久 | 欧美亚洲免费在线一区 | 91精品国产高清自在线观看 | 国产精品国产亚洲精品看不卡15 | 色av男人的天堂免费在线 | 国内精品久久久久久久97牛牛 | 久久综合给合久久狠狠色 | 波多野结衣在线观看一区二区三区 | 黄色一级大片在线免费看国产一 | 五月婷婷综合激情 | 久久人人97超碰com | 久久精品理论 | 色狠狠操| 开心丁香婷婷深爱五月 | 丁香花在线视频观看免费 | a亚洲视频| 在线观看免费视频你懂的 | 黄www在线观看 | 成人福利在线 | 天天摸夜夜添 | 久久久久国产成人精品亚洲午夜 | 91精品1区2区 | 亚洲专区视频在线观看 | 国产小视频在线免费观看视频 | 中文字幕在线视频一区 | 美女在线国产 | 91完整版在线观看 | 亚洲区另类春色综合小说 | 亚洲区另类春色综合小说 | 又黄又刺激 | 国产婷婷精品 | 中文字幕亚洲五码 | 国产伦理一区二区三区 | 欧美国产日韩中文 | 五月婷婷天堂 | 欧美日韩有码 | 麻豆传媒视频观看 | 最近最新中文字幕 | 99热手机在线 | 精品在线免费视频 | 激情综合交 | 欧美国产日韩一区二区三区 | 婷婷色综| 色欧美综合 | 成年人免费看片网站 | 亚洲国产欧美一区二区三区丁香婷 | 国产精品美女久久久久久久久久久 | 国产九九九视频 | 草樱av| 奇米先锋 | 在线免费视频一区 | 九色最新网址 | 伊人影院99 | 九九热中文字幕 | 色婷婷狠狠干 | 天天干天天射天天操 | 婷婷精品国产欧美精品亚洲人人爽 | 亚洲日本精品视频 | 中文在线免费一区三区 | 亚洲 欧洲av | 国产精品久久一 | 四虎国产精 | 爱干视频| 在线观av | 黄色一级大片免费看 | 日韩欧美亚州 | 国产一级视频在线 | 美女国产免费 | 2021av在线 | 成人午夜剧场在线观看 | 欧美三级高清 | 亚洲国产综合在线 | 开心激情网五月天 | 中文字幕在线观看第一区 | 男女激情片在线观看 | 五月天最新网址 | 激情综合网五月 | 日韩成人免费在线观看 | 国产色妞影院wwwxxx | 最新国产精品视频 | 国内丰满少妇猛烈精品播放 | 久久九九免费视频 | 亚洲精品在线视频观看 | 99精品视频精品精品视频 | 在线观看av大片 | 精品久久久久久久久久岛国gif | 在线免费观看黄色大片 | 99久久这里有精品 | 国内精品视频在线播放 | 在线免费观看涩涩 | 中字幕视频在线永久在线观看免费 | 黄色视屏在线免费观看 | 免费日韩电影 | 国产69精品久久99不卡的观看体验 | 国产麻豆视频在线观看 | 香蕉精品视频在线观看 | 天天操天天干天天综合网 | 国精产品999国精产品视频 | 久久在线 | 美女网站视频免费黄 | 日韩视频欧美视频 | 九九精品久久久 | 在线免费黄色av | 成人欧美一区二区三区在线观看 | 欧美精品在线观看一区 | 日韩欧美视频在线观看免费 | 久久av网址| 中文字幕一区二 | 久久精品99久久 | 久久国产香蕉视频 | 亚洲欧洲视频 | 最新av电影网址 | 亚洲一级片 | 日韩成人免费在线 | 色综合天天综合 | 在线观看黄网站 | 婷婷亚洲综合五月天小说 | 国产日韩精品一区二区三区 | 探花视频免费观看 | 国产精品久久久久久吹潮天美传媒 | 毛片网站在线 | 成人av av在线| 黄色1级毛片 | 69久久99精品久久久久婷婷 | 久久久久网址 | 亚洲精品午夜久久久久久久 | 美女视频黄免费的久久 | 国产中文字幕视频在线观看 | 日韩在线免费观看视频 | 中文十次啦 | 国产原创av在线 | 亚洲国产欧美一区二区三区丁香婷 | 国产精品 国内视频 | 国产第一页福利影院 | 99精品免费观看 | 国产又粗又硬又爽视频 | 韩国一区二区三区视频 | 日韩专区视频 | 日韩av电影一区 | 久久 亚洲视频 | 国产美女无遮挡永久免费 | 日日操夜夜操狠狠操 | 欧美另类色图 | 99久久精品国 | 91av在线免费播放 | 91精品久久久久久久久久入口 | 久久久久久久久久久久影院 | 国产精品一区二区av日韩在线 | 不卡国产在线 | 免费高清在线观看电视网站 | www.综合网.com| 国产成人一区二区三区在线观看 | 久久资源总站 | 久久一区二区三区国产精品 | 最近中文字幕高清字幕免费mv | 日韩欧美电影 | 91入口在线观看 | 国产拍在线 | 久久国产视频网站 | 中文字幕亚洲综合久久五月天色无吗'' | 午夜精品福利一区二区三区蜜桃 | 九九免费在线观看视频 | 91精品久久久久久久99蜜桃 | 国产高清在线 | 亚洲视频在线观看免费 | 国产一级性生活 | 亚洲精品国产成人 | 日韩久久久久久久 | 一区三区视频在线观看 | 欧洲精品久久久久毛片完整版 | 99色视频在线 | av在线电影网站 | 久久久网 | 91av在线视频播放 | 久久综合九色综合久久久精品综合 | 国产精品福利一区 | 日韩 在线观看 | 久久免费视频一区 | 中文字幕日韩在线播放 | 在线免费观看麻豆视频 | 91高清完整版在线观看 | 97视频人人免费看 | 五月天久久综合网 | 亚洲精品久久久久58 | 午夜三级影院 | 亚洲精品玖玖玖av在线看 | 中文av不卡| 天天狠狠操 | 在线视频久| 在线观看国产福利片 | 色91在线视频 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 久久久久久国产一区二区三区 | 一级一片免费看 | 综合激情网... | 超碰97在线资源 | 国产在线美女 | 欧美日韩1区 | 91香蕉视频污在线 | 久久久久久国产精品美女 | 国产黄色精品在线观看 | 欧美黑人性猛交 | 中文字幕电影在线 | 久久国产麻豆 | 亚洲综合色av | 国产精品电影一区 | 天天爱天天操 | 探花视频免费观看 | 国产精品久久久一区二区 | 99精品视频精品精品视频 | 日本性动态图 | www日日| 天天干国产| 国精产品一二三线999 | 日韩精品一区二区三区在线视频 | 99久久久国产精品免费99 | 人人澡人摸人人添学生av | 999久久久免费精品国产 | 亚洲高清在线视频 | 久久久国产在线视频 | 亚洲一片黄 | 四虎影视成人精品国库在线观看 | 久久a久久 | 国产一区久久 | 婷婷丁香久久五月婷婷 | 97福利视频 | 不卡电影一区二区三区 | 天天看天天干 | 国产男女无遮挡猛进猛出在线观看 | 在线 欧美 日韩 | 黄网站污 | 免费日韩一区二区 | 国产色女人 | 青青河边草免费 | 欧美色图另类 | 国产97在线观看 | 一区二区三区四区五区在线 | 人人干人人干人人干 | 日韩中文字幕亚洲一区二区va在线 | 黄色软件视频大全免费下载 | 91人人揉日日捏人人看 | 国产亚洲精品综合一区91 | 免费成人在线电影 | 激情av网 | 国产伦精品一区二区三区免费 | 中文字幕免费一区二区 | 国产手机视频 | 久艹在线免费观看 | 久久久久五月天 | av中文电影 | mm1313亚洲精品国产 | 男女日麻批 | 91专区在线观看 | 亚洲成人资源在线观看 | 午夜美女网站 | 成年人在线观看免费视频 | 国产高清久久久久 | 高清av网站 | 精品久久电影 | 欧美性猛片, | 午夜一级免费电影 | 色九九在线 | 免费观看成人av | 嫩草av影院 | 婷婷丁香五 | 香蕉视频18 | 欧美三级高清 | 丁香花在线观看视频在线 | 激情影院在线 | 色片网站在线观看 | 亚洲免费精品一区二区 | 日韩高清在线观看 | 久久99精品久久久久蜜臀 | 婷婷色综合色 | 午夜丁香网| 欧美资源在线观看 | 人人草人人草 | 狠狠操狠狠插 | 精品免费观看视频 | 国产一区二区三区视频在线 | 最近2019好看的中文字幕免费 | 欧美成人基地 | 99九九99九九九视频精品 | 国产美女精品视频免费观看 | 亚洲欧美视频 | 91亚洲精品在线 | 黄色软件在线看 | 久久人人爽 | 成人毛片一区 | 国产18精品乱码免费看 | 中文字幕在线免费看 | av片一区二区 | 日本精品在线 | 2018亚洲男人天堂 | 亚洲天堂在线观看完整版 | 99久久精品国产一区二区三区 | 国产精品成人免费精品自在线观看 | 国产一级电影在线 | 国产精品资源网 | 日本三级吹潮在线 | 久久黄色免费视频 | 久久综合中文色婷婷 | 国产在线精品一区二区三区 | 亚洲一级免费电影 | 久草视频看看 | 8x成人在线 | 国产精品一区二区免费看 | 中文字幕精品www乱入免费视频 | 一二区电影| 狠狠狠狠狠狠狠狠 | 日本精品一区二区三区在线观看 | 综合网欧美 | 岛国大片免费视频 | 天天操夜操| 一区二区三区四区在线免费观看 | 中文在线免费视频 | 伊人婷婷网 | 9在线观看免费 | 青青网视频 | 伊人久久av | 男女拍拍免费视频 | 日韩在线 一区二区 | 国产精品高清在线 | 国产在线一区二区三区播放 | 久久久久国产成人免费精品免费 | 国产一区网址 | 超碰97成人| 99人久久精品视频最新地址 | 久久久精品综合 | 亚洲国产精品999 | 久久69精品| 91麻豆精品国产 | 东方av在线免费观看 | 99久久精品国产一区二区成人 | 亚洲最大的av网站 | 成人网在线免费视频 | 激情久久伊人 | 日本午夜在线观看 | 欧美成人黄色 | 国产在线视频一区二区三区 | 黄色福利视频网站 | 99久久久免费视频 | 精品久久久久国产 | 欧美日韩精品在线 | 黄av资源| 美女视频是黄的免费观看 | 99免费在线视频 | 日日爱网址 | 亚洲国产精品一区二区久久hs | 欧美福利精品 | 国产无吗一区二区三区在线欢 | 日韩理论在线播放 | 日韩a欧美| 午夜精品一区二区三区在线视频 | 99视频在线免费观看 | 97视频免费 | 亚洲天堂网站 | 视频一区亚洲 | www九九热 | www.天堂av| 精品毛片一区二区免费看 | 日日夜夜天天久久 | 99精品视频在线观看视频 | 黄色毛片在线观看 | 开心激情婷婷 | 久久少妇免费视频 | 日韩在线观看小视频 | 黄色精品免费 | 97成人免费 | 免费看一级特黄a大片 | 99久久99久久精品免费 | 免费在线91| 天天爽人人爽夜夜爽 | 日韩最新在线视频 | av中文字幕在线免费观看 | 天天色综合久久 | 国产精品系列在线观看 | 欧美少妇xx| 五月婷婷久久丁香 | 精品国产精品一区二区夜夜嗨 | 天天玩夜夜操 | 91亚洲精品乱码久久久久久蜜桃 | 亚洲天堂激情 | 中文 一区二区 | 六月激情丁香 | ,午夜性刺激免费看视频 | 欧美综合国产 | 五月婷婷视频在线 | 国产综合婷婷 | 黄色福利视频网站 | 韩日在线一区 | 日本在线视频一区二区三区 | 国产免费xvideos视频入口 | 日日干天天爽 | 一级黄色在线免费观看 | 99精彩视频在线观看免费 | 开心丁香婷婷深爱五月 | 美国三级黄色大片 | 欧美精品中文 | 久久人人爽人人爽人人 | 日韩欧美综合 | 亚洲午夜av久久乱码 | 麻豆精品视频在线观看免费 | 久久久国产一区二区三区 | 欧美日韩亚洲在线观看 | 天天操天天添 | 精品夜夜嗨av一区二区三区 | 久久综合久久久 | 成人黄色资源 | 免费日p视频 | 日韩精品免费在线播放 | 国产成人三级一区二区在线观看一 | 精品久久久久一区二区国产 | 国产精品成人一区二区三区吃奶 | 91精品视频免费 | 亚洲精品456在线播放乱码 | 在线视频你懂 | 午夜性色| 最近免费中文字幕大全高清10 | 亚洲爱av| 99久久精品久久亚洲精品 | 午夜久久久影院 | 久久99中文字幕 | 国产精品国内免费一区二区三区 | 中文字幕有码在线播放 | 国产精品久久久久久吹潮天美传媒 | 日韩在线中文字幕视频 | 国产不卡在线观看 | 免费久草视频 | 亚洲精品一区中文字幕乱码 | 欧美热久久 | 九九久久免费视频 | 久久精品第一页 | 成人在线播放免费观看 | 国产精品18久久久久白浆 | 精品亚洲免费 | 中文在线8新资源库 | 国产黄视频在线观看 | 精品毛片一区二区免费看 | 正在播放五月婷婷狠狠干 | 成人网444ppp | 亚洲欧美国内爽妇网 | av日韩在线网站 | 91精品1区 | 日韩综合在线观看 | 国产高清在线免费视频 | 色婷婷亚洲婷婷 | 久久综合狠狠综合久久激情 | 91热视频在线观看 | 色婷婷久久一区二区 | 男女激情片在线观看 | 天天操操 | 国产精品成人aaaaa网站 | 免费的黄色av | 97超视频免费观看 | 久久午夜色播影院免费高清 | 日韩乱码在线 | 久久一区二| 精品专区 | 91精品成人久久 | 波多野结衣电影一区二区 | 亚洲电影久久久 | 操操操人人| 丁香 久久 综合 | 日韩成片 | 亚洲国产免费 | 亚州成人av在线 | 国产福利免费在线观看 | 国产精品乱码久久久久久1区2区 | 麻豆久久一区 | 久久一区二区三区日韩 | 麻豆国产精品va在线观看不卡 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 少妇搡bbbb搡bbb搡忠贞 | 欧美性生活免费 | 一区二区精品 | 亚洲自拍偷拍色图 | 伊人伊成久久人综合网站 | 911精品美国片911久久久 | 美女禁18| 天天操婷婷 | 国产伦精品一区二区三区高清 | 国产精选在线观看 | 欧洲色吧| 中文av影院 | 国产福利在线免费 | 日日夜夜综合网 | 亚洲精品18日本一区app | www成人av | 久久国产精品偷 | 日本一区二区三区视频在线播放 | 久久久99精品免费观看 | 久久综合九色综合97_ 久久久 | 国产精品久久 | 免费在线一区二区三区 | 黄色亚洲精品 | 国产一级黄色免费看 | 久久成人国产精品一区二区 | 久草免费色站 | 国产视频精品久久 | 日韩有色 | 久久伊人色综合 | 在线观看网站av | 91av片 | 五月天狠狠操 | 五月婷香蕉久色在线看 | 精品国产99国产精品 | 日韩有码在线观看视频 | 久久久久免费精品视频 | 久久久免费精品视频 | 国产日产高清dvd碟片 | 五月激情视频 | 天天要夜夜操 | 99人久久精品视频最新地址 | 韩日三级在线 | 99精品视频免费看 | 久久久婷 | 日韩三级在线 | 在线看成人 | 久久久国产高清 | 欧美亚洲国产一卡 | 精品免费久久久久久 | 国产99久久 | 日韩 在线 | 中文字幕精品一区久久久久 | 国产综合福利在线 | 99欧美视频| 在线精品播放 | 久久久网址 | 成人av电影在线 | 国产精品成人av在线 | 日韩中文字幕在线观看 | 国产高清av在线播放 | 久久精品毛片 | 国产精品6| 亚洲专区路线二 | 国产视频网站在线观看 | 91成人在线免费观看 | 99免费在线视频 | 国产 字幕 制服 中文 在线 | www.91国产 | 黄色成年网站 | ww视频在线观看 | 亚洲桃花综合 | 美女在线国产 | 欧美污在线观看 | 九九九九九九精品任你躁 | 亚洲精品久久在线 | 免费成人在线视频网站 | 福利视频在线看 | 成人av高清在线观看 | 国产成人一区二区三区在线观看 | 日韩精品中文字幕在线 | 91在线免费视频观看 | 91久久国产自产拍夜夜嗨 | 成人一级电影在线观看 | 午夜国产一区 | 国产精品美女久久久免费 | 国产97色在线 | 日韩免费观看av | 一级黄色大片在线观看 | 国产免费一区二区三区网站免费 | 日韩欧美精品一区二区三区经典 | 免费精品人在线二线三线 | 国产美女精品人人做人人爽 | 国产精品久久久久久999 | 欧美日韩精品网站 | 免费视频一级片 | 国产手机在线观看视频 | 色资源网免费观看视频 | 国产不卡视频在线 | 久久精品牌麻豆国产大山 | 国产日韩在线一区 | 五月婷婷中文网 | 一级特黄aaa大片在线观看 | 97人人爽 | 日韩最新理论电影 | 国产精品久久久久久久久久久久午 | 国产一区二区不卡在线 | 婷婷丁香激情网 | 午夜精品久久久久久久99 | 久产久精国产品 | 夜又临在线观看 | 国产精品无av码在线观看 | 综合网色 | 国产又粗又硬又长又爽的视频 | 九七视频在线观看 | 黄色精品在线看 | 国产一级片视频 | 国产精品久久久久久久免费大片 | 成人免费观看视频网站 | 欧美狠狠操 | 超碰夜夜 | 日日夜夜免费精品 | 视频一区在线播放 | 国产高清无线码2021 | 久草久草在线 | 香蕉视频在线免费看 | 丰满少妇在线观看网站 | 日本性生活一级片 | 天天操天天插 | 在线看的毛片 | 色视频网站在线 | 国产喷水在线 | 日韩理论在线观看 | 久久久久久高潮国产精品视 | 欧美一区在线看 | 91看片淫黄大片一级在线观看 | 2018好看的中文在线观看 | 91精品人成在线观看 | 久久久久久在线观看 | 国产女人40精品一区毛片视频 | 精品国产人成亚洲区 | 丁香婷婷色综合亚洲电影 | 欧美日一级片 | 国产又粗又长又硬免费视频 | 中文字幕高清 | 啪啪免费观看网站 | 91在线视频观看免费 | 亚洲人人av | 99热在线国产 | 黄色视屏av | 久久公开免费视频 | 麻豆av一区二区三区在线观看 | 免费能看的av | 五月天久久狠狠 | 欧美日韩不卡在线观看 | 久久er99热精品一区二区 | 成年人免费在线观看网站 | 亚洲精品在线视频播放 | 国产在线视频导航 | 超碰97网站| 欧美日韩在线第一页 | 成av在线| 亚洲欧洲精品在线 | 九九九视频精品 | 亚洲天堂精品视频在线观看 | 免费黄色看片 | 美女精品在线观看 | 成人动漫精品一区二区 | 手机看片国产 | 韩国av一区二区三区 | 色爱区综合激月婷婷 | 久久久久久久国产精品 | 最近免费中文字幕大全高清10 | 国产精品精品国产婷婷这里av | 丁香高清视频在线看看 | 日韩欧美精品在线观看视频 | 中文字幕二区在线观看 | 色噜噜狠狠狠狠色综合 | 欧美va天堂在线电影 | 激情开心 | 成人羞羞免费 | 日韩午夜高清 | 亚洲视频久久久久 | 国产在线观看免 | 黄网站色成年免费观看 | 久久精品亚洲国产 | 国产精品com | 国产黄色大全 | 在线观看中文字幕2021 | 丁五月婷婷 | 日韩精品免费专区 | 久久九九免费视频 | 精品国产一二三四区 | 国产成人三级在线观看 | 亚洲 中文字幕av | 国产高清精品在线观看 | 久久国产高清 | 免费成人在线网站 | 视频高清 | 久久久久一区二区三区四区 | 91精品国产综合久久福利 | 91网址在线看 | 国产999视频在线观看 | 久久永久视频 | 精品国产欧美一区二区三区不卡 | 国产精品一区二区av | 日本成人黄色片 | 国产精品精品视频 | 在线免费观看黄色 | 久久免费高清 | 亚洲国产精品第一区二区 | 91精品啪在线观看国产81旧版 | 国产黄色精品视频 | 激情五月伊人 | 亚州中文av | 国产成人精品午夜在线播放 | 最新国产在线观看 | 欧美一级电影 | 91精品网站在线观看 | 激情五月激情综合网 | 久草在线视频首页 | 天天干亚洲 | 久久婷婷色综合 | 97超碰人人网 | 四虎影院在线观看av | 日韩午夜大片 | 蜜桃视频日本 | 99精品视频免费看 | 欧美一二区视频 | 婷婷色在线观看 | 91在线在线观看 | 99久久99| 成人精品电影 | 久久人人爽人人片 | 国模精品一区二区三区 | 国产91精品高清一区二区三区 | 色婷婷成人 | 夜夜操天天摸 | 亚洲视频专区在线 | www夜夜操 | 国产一级特黄电影 | 91视频传媒 | 国产亚洲精品久久久久久移动网络 | 精品国产福利在线 | 色婷婷国产精品一区在线观看 | 久久99久久99精品免观看软件 | 亚洲免费观看视频 | 国产原创在线观看 | 能在线看的av | 久久精品高清 | 午夜国产福利在线观看 | 国产精品久久久久久久久久久久午夜 | 99免费在线视频 | 日韩三级一区 | 超碰在线1 | 操操综合 | 美女视频黄是免费的 | 久艹视频免费观看 | 日韩免费电影网 | 亚洲成人午夜av | 日本久久91 | 国产精品久久久久久久久久免费 | 国产麻豆传媒 | 在线观看一区视频 | 国产精品久久久久久久久毛片 | 在线黄色国产 | 伊人中文在线 | 一区二区三区免费 | 国产精品高潮久久av | 99在线精品视频观看 | 亚洲精品乱码久久久久久蜜桃91 | 精品美女视频 | 久久婷婷亚洲 | 色国产精品 | 精品免费国产一区二区三区四区 | 国产精品一区二区三区四区在线观看 | 青青河边草观看完整版高清 | 中文在线字幕免 | 97久久精品午夜一区二区 | 日韩精品偷拍 | 欧美在线资源 | 国产99久久精品一区二区300 | 综合视频在线 | 国内精品久久久久影院一蜜桃 | 亚洲免费av观看 | 91久草视频 | 九九免费在线观看视频 | 精品在线观看视频 | 九九在线精品视频 | 在线视频精品播放 | 超碰人人射| 中文字幕在线观看视频一区 | 中文字幕色在线 | 99久久国产免费,99久久国产免费大片 | 久久这里只有精品1 | 黄www在线观看 | 亚洲午夜av电影 | 一区二区视频在线播放 | 999视频精品 | 国产一二三四在线观看视频 | 欧美污在线观看 | 99久久精品午夜一区二区小说 | 黄色成人91 | 婷婷激情网站 | www视频在线播放 | 丁香激情综合国产 | 国产小视频网站 | 日韩精品一区二区三区高清免费 | 在线观看免费观看在线91 | 国产黄色精品网站 | 97精品久久人人爽人人爽 | 欧美久久久影院 | 久久久黄色免费网站 | 国产原创中文在线 | 在线观看国产一区二区 | 91精品爽啪蜜夜国产在线播放 | 国产又粗又猛又爽又黄的视频免费 | 久久永久视频 | 中文字幕一区二区三区久久 | www.香蕉 | 日韩精品第1页 | 激情片av | 国产成人一区二区三区久久精品 | 亚洲三级在线 | 国产黄色在线 | 欧美中文字幕第一页 | av成人动漫在线观看 | 91在线国内视频 | 欧美日韩国产欧美 | 91高清完整版在线观看 | 亚洲视频 视频在线 | 成人av电影免费在线播放 | 国产探花视频在线播放 | 国产美女网站在线观看 | 亚洲国产欧洲综合997久久, | 日韩久久久久久 | 日日躁天天躁 | 日韩欧美国产精品 | 精品国产_亚洲人成在线 | 中文字幕91在线 | 在线免费观看国产黄色 | 国产女教师精品久久av | 日韩免费在线网站 | 中文字幕人成乱码在线观看 | 在线免费精品视频 | 99热这里只有精品在线观看 | 亚洲视频 中文字幕 | 国产精品美女久久久久久网站 | 亚洲精品国产精品国自产观看浪潮 | 日韩成人在线免费观看 | 亚洲一区二区三区四区精品 | 久久免费一 | 99国产高清 | 黄色在线观看污 | 手机av电影在线观看 | 丁香五月缴情综合网 | 99 色| 天天操狠狠操夜夜操 | 黄污视频网站大全 | 成人午夜精品福利免费 | 2021国产精品视频 | 人人射人人射 | 又黄又爽又色无遮挡免费 | 国产另类av| 亚洲专区在线播放 | 欧美天天射 | 久久婷婷一区 | 成人av片在线观看 | 久久久久成人免费 | 天天做天天爱天天综合网 | 亚洲另类交| 亚洲精品在线电影 | 这里只有精品视频在线观看 | 久久精品人 | 九9热这里真品2 | 视频在线观看国产 | 久久99精品久久久久久清纯直播 | 久久精品国产亚洲a | 91国内在线视频 | 国产剧情一区在线 | 国产成人高清在线 | 97精品国产97久久久久久春色 | 国产精品小视频网站 | 久草免费在线观看视频 | 日韩免费大片 | 精品国产一区二区三区久久 | 亚洲影院国产 | 日韩免费在线播放 | 一区二区观看 | 久久久久久高潮国产精品视 | 中国一级片在线观看 | 国产成人资源 | 亚洲伊人网在线观看 | 国产精品免费一区二区三区 | 在线观看视频 | 天堂av免费看 | 亚洲国产免费av | 国产精品va视频 | 亚洲va欧美va| 成人免费视频在线观看 | 欧美少妇18p | 欧美精品xxx | 免费在线国产黄色 | 亚洲va欧洲va国产va不卡 | 久久久久久久久久久免费 | 午夜日b视频 | 性色va| 久久久久草 | 99国产精品视频免费观看一公开 | 高清精品视频 | 日韩区欠美精品av视频 | 国产一区国产二区在线观看 | 久久免费福利视频 | 国产精品99久久久久久大便 | 91精品啪在线观看国产 | 人人玩人人添人人澡97 | 国产亚洲情侣一区二区无 | 国产成人精品日本亚洲999 | 久久综合九色综合久99 | 国产美女永久免费 | 夜夜躁狠狠躁日日躁视频黑人 | 人人干狠狠操 | 久久久免费国产 | 成人免费观看网址 | 一区二区视频在线播放 | 亚洲美女在线一区 | 亚洲精品男人天堂 | 国产伦理一区二区三区 | 一区二区av| 最新日韩在线观看 | 天天操天天添 | 91视频在线免费 | 亚洲va在线va天堂 | 精品国产一区二区三区久久久久久 | 久久黄视频 | 国产91九色视频 | 久久久久伊人 | 日韩av三区| 天天操天天操天天操天天操天天操 | 日韩在线观看高清 | 国产天天爽 | 亚洲精品999 | 久久久久麻豆 | 99自拍视频在线观看 | 久久久五月婷婷 | 国产日产精品久久久久快鸭 | 国产黄色大片 | 美女精品久久久 | 三级黄色理论片 | 国产1区2区3区精品美女 | 亚洲va欧美va人人爽春色影视 | 色黄久久久久久 | 色综合天天狠天天透天天伊人 | 手机看片国产 | av中文字幕第一页 | 久久99久国产精品黄毛片入口 | 亚洲国产三级在线观看 | 欧美做受高潮 | 嫩草av在线| 免费色视频网址 | 精品在线小视频 | 中文av资源站 | 日韩在线观看视频网站 | 六月激情婷婷 | 色综合久久综合中文综合网 | 午夜精品在线看 | 99国产一区 | 欧美激情xxxx性bbbb |