def tail(self, obs=<NUM_LIT:5>):
code = "<STR_LIT>" + self.libref + '<STR_LIT:.>' + self.table + self._dsopts() + "<STR_LIT>"<EOL>nosub = self.sas.nosub<EOL>self.sas.nosub = False<EOL>le = self._is_valid()<EOL>if not le:<EOL><INDENT>ll = self.sas.submit(code, "<STR_LIT:text>")<EOL>lastobs = ll['<STR_LIT>'].rpartition("<STR_LIT>")<EOL>lastobs = lastobs[<NUM_LIT:2>].partition("<STR_LIT>")<EOL>lastobs = int(lastobs[<NUM_LIT:0>])<EOL><DEDENT>else:<EOL><INDENT>lastobs = obs<EOL><DEDENT>firstobs = lastobs - (obs - <NUM_LIT:1>)<EOL>if firstobs < <NUM_LIT:1>:<EOL><INDENT>firstobs = <NUM_LIT:1><EOL><DEDENT>topts = dict(self.dsopts)<EOL>topts['<STR_LIT>'] = lastobs<EOL>topts['<STR_LIT>'] = firstobs<EOL>code = "<STR_LIT>" + self.libref + '<STR_LIT:.>' + self.table + self.sas._dsopts(topts) + "<STR_LIT>"<EOL>self.sas.nosub = nosub<EOL>if self.sas.nosub:<EOL><INDENT>print(code)<EOL>return<EOL><DEDENT>if self.results.upper() == '<STR_LIT>':<EOL><INDENT>code = "<STR_LIT>" % (self.libref, self.table, self.sas._dsopts(topts))<EOL>return self._returnPD(code, '<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>if self.HTML:<EOL><INDENT>if not le:<EOL><INDENT>ll = self.sas._io.submit(code)<EOL><DEDENT>else:<EOL><INDENT>ll = le<EOL><DEDENT>if not self.sas.batch:<EOL><INDENT>self.sas.DISPLAY(self.sas.HTML(ll['<STR_LIT>']))<EOL><DEDENT>else:<EOL><INDENT>return ll<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if not le:<EOL><INDENT>ll = self.sas._io.submit(code, "<STR_LIT:text>")<EOL><DEDENT>else:<EOL><INDENT>ll = le<EOL><DEDENT>if not self.sas.batch:<EOL><INDENT>print(ll['<STR_LIT>'])<EOL><DEDENT>else:<EOL><INDENT>return ll<EOL><DEDENT><DEDENT><DEDENT>
display the last n rows of a table

:param obs: the number of rows of the table that you want to display. The default is 5
:return: